boost::scoped_ptr<T> is a great tool for RAII pointer accounting when change-of-ownership semantics are not required.  I have had need recently of a pointer type that is associated to a static const object on construction (undestroyable via delete/[]), but that may change at runtime - basically a way to keep memory usage to a minimum, and prevent many copies of what is effectively a static object.

 

template<class T> class default_scoped_ptr { 

   static const T staticObj;   // how to specify default arguments?

 

public:

   T*  get() ;

   T* operator->();

 

}