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

Reply via email to