This class is the base class for typified smart pointers.
Remarks
Smart pointers relieve the programmer of having to determine when objects are no longer needed, or having to delete them at that time.
Each object referenced by a SmartPointer (henceforth 'referenced object') maintains a reference count; i.e., how many SmartPointers are referencing it. When the reference count reaches zero, the referenced object is deleted.