Boost logo

Boost :

Subject: Re: [boost] [Block Pointer] Question about cycles rationale
From: Peter Dimov (lists_at_[hidden])
Date: 2016-03-13 18:24:48

Seth wrote:

> To me it looks like this comprehensively refutes the purpose of the
> block_ptr as a ref-cycle mitigation scheme: the programmer seems to still
> be responsible for anticipating cycles and special casing destructors for
> it.

This problem can't be solved in general. When you have

struct node
    node_ptr<node> p_;
    ~node() { p_->something(); }
    void something();

and you have a cycle with two nodes pointing at each other, it's simply not
possible to destroy them properly.

The shared_ptr collectors with which I have experimented try to sidestep
this by first zeroing all pointers that participate in a cycle, then running
the destructors. So you'd need

    ~node() { if( p_ ) p_->something(); }

See for example

I abandoned this proposal because I could think of no way to make it work
with multiple threads and weak_ptr.

Boost list run by bdawes at, gregod at, cpdaniel at, john at