|
Boost : |
From: Peter Dimov (pdimov_at_[hidden])
Date: 2003-02-10 12:45:23
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_;
};
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk