std::shared_ptr/weak_ptr/shared_from_this