I'm having some problems with bad_weak_ptr exceptions. I have reduced my code into this test case: #include <boost/shared_ptr.hpp> #include <boost/weak_ptr.hpp> using boost::shared_ptr; using boost::weak_ptr; class A { weak_ptr<A> weakThis; public: virtual ~A(){} shared_ptr<A> a; shared_ptr<A> getThis () { shared_ptr<A> x(weakThis); return x; } void init () { a = getThis(); } static shared_ptr<A> create () { shared_ptr<A> x(new A); x->weakThis = x; x->init(); return x; } }; class B : public A { weak_ptr<B> weakThis; public: virtual ~B(){} shared_ptr<B> getThis () { shared_ptr<B> b(weakThis); return b; } static shared_ptr<B> create () { shared_ptr<B> x(new B); x->weakThis = x; x->init(); return x; } }; int main (char** argv, int argc) { shared_ptr<B> b = B::create(); return 0; } If I create an instance of A instead of B or doesn't call x->init() in the B's create function I don't get an exception. The problem is creating a shared_ptr from the weak_ptr in getThis.