[Solution #2 has good info.]
This is C++. You could just make a static instance inside the get() method. This would prevent the need for or access to a destructor (but this would be taken care of at program exit). In other words:
static X* getI()
{
static X pIX;
return &pIX;
}
[you can't do this in java for example.]
Also
(1) this is not threadsafe (which may or may not be an issue for you). If you have multiple threads, the construction (at least) should be protected with a critical section so you don't get 2 or more messed up instances.
(2) you don't need to do "if(x) delete x;" - just "delete x;" ... you don't need to check if the pointer is NULL.