I take back this suggestion -- intrusive_ptr<> does what I want.

- Chuck

Chuck Messenger wrote:
Suppose you have this:

    struct X {
        shared_ptr<Y> y;
        ...
    };

    struct Y {
        X x;
        ....
    };

    struct Z {
        Z() : pimpl_(new Y()) { pimpl_->x.y = pimpl_; }
        shared_ptr<Y> pimpl_;
        ...
    };

I'm using the "pimpl" idiom. When I create Z, I create an embedded Y ("y"), setting y's x so that it points to y.

The problem is that Y will now never die. What I'd like to do is to decrement the reference count in x, when I construct the Y:

        Z() : pimpl_(new Y()) { pimpl_->x.y = pimpl_;
                  pimpl_.decrement_reference_count(); }

This is perfectly sound -- it decrements the reference count from 2 to 1. It says, basically, "the mother structure contains a self-referring pointer. If that's the only one left, then kill the mother structure."

Why do I want to do all this? Well, I could get into the very sound reasons if anyone is interested. It is a technique for avoiding circular shared_ptr references.


- Chuck Messenger



_______________________________________________
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