
Hello. I want to use intrusive_ptr as a smart pointer to have reference counting without shared_ptr overhead. There's no implementation for embedding reference counting into a pointee class provided by Boost.Smart Ptr library. I'd like to have reference counting easily embedded, like thru inheritance: class test : public intrusive_pointee_base<test> { ... }; I come to an implementation of this. As i'm sure this was coded many times before, two questions: (1) Why stock implementation of intrusive counter is not included to Smart Pointers library ? (2) Is there something wrong with my code ? struct refcount { refcount(void) : count_(0) {} refcount(refcount const&) : count_(0) {} refcount& operator=(refcount const&) {} long operator++(void) { return ::InterlockedIncrement(&count_); } long operator--(void) { return ::InterlockedDecrement(&count_); } private: mutable volatile long count_; }; template<class T> void intrusive_ptr_add_ref(T * p); template<class T> void intrusive_ptr_release(T * p); template<class Derived> class intrusive_pointee_base { friend void intrusive_ptr_add_ref<Derived>(Derived * p); friend void intrusive_ptr_release<Derived>(Derived * p); refcount reference_counter_; protected: ~intrusive_pointee_base(void) {} }; template<class T> void intrusive_ptr_add_ref(T * p) { intrusive_pointee_base<T> * pbase = p; ++(pbase->reference_counter_); } template<class T> void intrusive_ptr_release(T * p) { intrusive_pointee_base<T> * pbase = p; if (!--(pbase->reference_counter_)) delete p; }