shared_ptr or weak_ptr in general