The libcult memory management library provides non-intrusive reference counter and a couple of smart pointers.
It also overrides and overloads default memory management operators
(operator new and operator delete) to allow
special service objects (reference counter being one of them) to be
constructed in the memory block preceding the instance. This allows
transparent instrumentation of objects with a special
functionality like reference counting or locking.
The two flavors of smart pointers are exclusive (called
Evptr, from exclusive
pointer) and shared (called Shptr,
from shared pointer) pointers.
The exclusive pointer has semantics similar to std::auto_ptr
(i.e., exclusive ownership of the object pointed to) except that it performs
automatic copying of the object pointed to when copied or assigned to another
exclusive pointer. Built-in copy-on-write optimization eliminates unnecessary
copying when instances of exclusive pointers are returned from functions or
stored in containers.
The shared pointer has standard semantics of a reference-counting smart pointer.