
Eric Niebler wrote:
The implementation is quite trivial (see below).
Seems pretty complicated to me. The "canonical" counted_base is (assuming namespace boost): class counted_base { private: mutable detail::atomic_count count_; protected: counted_base(): count_( 0 ) {} virtual ~counted_base() {} counted_base( counted_base const & ): count_( 0 ) {} counted_base& operator=( counted_base const & ) { return *this; } public: inline friend void intrusive_ptr_add_ref( counted_base const * p ) { ++p->count_; } inline friend void intrusive_ptr_release( counted_base const * p ) { if( --p->count_ == 0 ) delete p; } long use_count() const { return count_; } }; Seeing so many variations of it is a pretty good indication that we need it in Boost. :-)