smart pointer finished