On Mon, May 2, 2011 at 4:23 PM, Ovanes Markarian
<om_boost@keywallet.com> wrote:
On Mon, May 2, 2011 at 3:01 PM, Frank Mori Hess
<frank.hess@nist.gov> wrote:
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
On Monday, May 02, 2011, Peter Dimov wrote:
> > // thread B
> > // p2 goes out of scope: undefined, the destructor is considered a
> >
> > "write access"
>
> This example just says that you can't make a copy of a destroyed
> shared_ptr, or one that is in the process of being destroyed. In
> principle, it has nothing to do with reference counts. Doing something
> with a destroyed object of any type is undefined behavior in C++.
It looks like the example isn't quite right though, as p2 was declared in
thread A so it can't go out of scope in thread B.
It still can happen if p2 is a weak_ptr in thread "A" and the corresponding shared_ptr goes out of scope in thread "B".
Best Regards,
Ovanes
Actually, I am not sure with this statement. Destructor is only called if shared count reaches zero. I don't think that this can happen, that a dtor is called in one thread and the other thread is still able to increment the shared count even from the weak_ptr. I remember reading weak_ptr's source and saw that it is also protected again such a case.
Thanks,
Ovanes