void SomeFunction(undeletable_ptr<SomeObject>); void CodeSnippet() { SomeObject* p = new SomeObject(); try { SomeFunction(p); } catch(...) { } delete p; // now known to be valid }