In the C-library the type void* is used as generic pointer type. But member functions cannot be
called without a type and user typecasts would be required to operate on the pointer's data. With
C++ templates the user can constitude the type of dump pointer to be stored inside the wrapped
pointer instance.
Constructors
To get the dump pointer inside the wrapped pointer a few constructors are required. Null pointers
should indicate an unde¯ned destination for smart pointers like they do for dump pointers.
A null smart pointer can be created with the default constructor that takes no arguments.
Example: SmartPtr<std::string> ptr;
A copy constructor need to be de¯ned, to initialize a wrapped pointer from another
compatible wrapped pointer instance.
Example: SmartPtr<std::vector> ptr(ptr2);
To initialize the wrapped pointer from a dump pointer a constructor is needed with the type
of the dump pointer as argument.
Example: SmartPtr<int> ptr(new int(31337));