CSmartPtr

From Valve Developer Community

Smart pointers can be used to automatically free an object when nobody points at it anymore. Things contained in smart pointers must implement AddRef and Release functions. If those functions are private, then the class must make CRefCountAccessor a friend.