From: Peter Dimov (pdimov_at_[hidden])
Date: 2006-04-15 07:58:43
Eric Niebler wrote:
> I'm thinking about replacing some uses of shared_ptr with
> intrusive_ptr, but I've got questions. One of the nice things about
> shared_ptr is the lock-free thread-safe ref counting. I want my
> intrusive_ptr to have the same safety and efficiency, but I don't see
> how to get it. I see $boost_root/detail/atomic_count.hpp, but
> shared_ptr doesn't use it. Why not? And why is it in detail/? Should
> I not consider using it?
shared_ptr doesn't use atomic_count because the addition of weak_ptr has
made atomic_count's interface insufficient.
atomic_count is in detail:: because I didn't consider it ready for boost::.
On the other hand, if it works for you, there is no reason to not use it.
> Taking in the bigger picture, intrusive_ptr requires people to write
> their own add_ref and release functions, most of which will probably
> end up using ++ and -- on a plain integer. This is totally broken in
> multi-threaded applications, right?
Using ++ and -- on a plain integer without synchronization is broken in MT
> Isn't it dangerous to not provide
> complementary utilities for correctly managing reference counts? It
> seems to me intrusive_ptr is impossible to use safely and portably.
> What have I missed?
It's possible to use intrusive_ptr safely and portably if you already have
an existing library that provides intrusive reference counting without also
supplying a corresponding pointer type, and one of the goals of
boost::intrusive_ptr is to establish a standard "corresponding pointer type"
for such libraries.
However, you are right that intrusive_ptr doesn't help the implementers of
these libraries to get their reference counting correct, and that it
probably should do that.
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk