Not the destructor, because deleting the object calls the destructor and that'll be recursive.
Normally you would implement a get method which creates the object if it doesn't exist, then returns a reference to itself, and a release method which deletes the object if there are no references left. These are both static functions
. If it's a global object of which there will always be one instance then get just returns a reference and release doesn't need to exist.