Listing 3
SomeObject* SomeFunction1(); void CodeSnippet1() { // something fishy going on, but nothing identifiable by compiler SomeObject* p; p = SomeFunction1(); delete p; } undeletable_ptr<SomeObject> SomeFunction2(); void CodeSnippet2() { SomeObject* p; p = SomeFunction2(); // compilation error delete p; } undeletable_ptr<SomeObject> SomeFunction3(); void CodeSnippet3() { undeletable_ptr<SomeObject> p; p = SomeFunction3(); delete p; // compilation error }