Memory management and lifetime of isl_ctx objects seems quite different from the ones that islpp automatically extracts. Let's not pretend the API should be the same (i.e. get, release etc), it feels more confusing than anything else.
From skimming through uses of isl::ctx it seems it is alway used with .release().
How about dropping all these raw pointer accessors and just implicitly convert to isl_ctx* ?