I have created a simple template to make instantiation of shared_ptrs a little prettier. Here is an abridged version of the template: template <class T> class ManagedPointer : public boost::enable_shared_from_this<T> { public: typedef boost::shared_ptr<T> shared_ptr; public: static shared_ptr create () { return (shared_ptr (new T ())); } template <class A1> static shared_ptr create (A1 a1) { return (shared_ptr (new T (a1))); } }; This allows for me to create a class: class TestClass : public ManagedPointer<TestClass> { public: TestClass(); }; and create an instance by: TestClass::shared_ptr test = TestClass::create(); I have noticed in certain cases I get very strange behaviour. Most recently I've seen things hanging in the shared_ptr destructor. Changing the code to: TestClass::shared_ptr test (new TestClass()); does "solve" the problem. Is there something subtle in how the templates and subclassing are interacting that I am not understanding? thanks. e.