A smart pointer encapsulates a pointer in a object - it acts as a resource handle
Smart pointers use the RAII idea