Works great! How thread safe is this? Thanks, Peter
"Peter Dimov" <[EMAIL PROTECTED]> wrote in message 001301c2d12c$30c1d210$1d00a8c0@pdimov2">news:001301c2d12c$30c1d210$1d00a8c0@pdimov2... > 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 > _______________________________________________ Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost