Consider this
class Foo { public: Foo(){} ~Foo(){} void NonConstBar() {} void ConstBar() const {} }; int main() { const Foo* pFoo = new
The lifetime of an object ends (for the owner/enclosing scope) as soon as the destructor is invoked, not when the destructor returns.
Therefore I don't see any problem deleting constants. It's already gone for you when you call delete.
Otherwise deleting constant objects would require a const_cast.