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

Reply via email to