dynalink wrote: > I need to create a single instance of X and have it disappear when > the > final B pointer goes out of scope. The problem with this code is that > A::m_X immediately bumps the ref count and only goes out of scope on > termination. > > Here's a simple example: > > class X; // defined elsewhere; in my case wraps a classic C > structure. typedef boost::smart_ptr<X> X_ptr; > > struct A { > static X_ptr create() { if (!m_X.get()) m_X.reset(new X); return > m_X; } static X_ptr m_X; > }; > > struct B { > B() : m_A(A::create()){} > X_ptr m_A; > };
You need to keep a weak_ptr in A. struct A { static X_ptr create() { if(X_ptr px = make_shared(wp_)) { return px; } else { X_ptr px(new X); wp_ = px; return px; } } static weak_ptr<X> wp_; }; _______________________________________________ Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost