An example smart pointer template class