extends of shared_ptr