C++11 成员函数获取指向类实例的共享指针的副本

C++11 成员函数获取指向类实例的共享指针的副本,c++11,shared-ptr,C++11,Shared Ptr,我开始使用C++11共享指针 我需要编写成员函数,将指向其类实例的指针添加到容器(即,注册(添加)它们在某个集合中的存在) 使用简单的旧指针,我可以做到这一点 class myClass { public: void Register( std::vector< myClass* >& v_registrants ) { v_registrants.push_back( this ); } }; 难道没有比这更好的东西吗?我相信这正是

我开始使用C++11共享指针

我需要编写成员函数,将指向其类实例的指针添加到容器(即,注册(添加)它们在某个集合中的存在)

使用简单的旧指针,我可以做到这一点

class myClass {
public:
    void Register( std::vector< myClass* >& v_registrants )
    {
        v_registrants.push_back( this );
    }
};

难道没有比这更好的东西吗?

我相信这正是我们想要的

继承自
std::enable_shared_from_此
为类提供了一个名为的成员函数,使您能够安全地获得与原始所有者共享所有权的
std::shared_ptr

因此,在您的情况下,要使用它,您必须更改您的类定义,如下所示:

class myClass_safe : public std::enable_shared_from_this<myClass_safe> {
public:
    void Register( std::vector< std::shared_ptr<myClass_safe > >& v_registrants )
    {
        v_registrants.push_back( shared_from_this() );
    }
};
class myClass\u safe:public std::启用\u共享\u{
公众:
无效寄存器(std::vector&v\u注册者)
{
v_注册者。推回(从_this()共享_);
}
};

另外请注意,在从\u this调用shared\u之前,对象必须由共享指针拥有。

您是否已经尝试过使用?顺便说一句,这听起来像是复杂的所有权。也许你可以简化设计(XY问题?)。
class myClass_safe {
public:
    void Register( 
        std::shared_ptr<myClass_safe >& my_shared_ptr,
        std::vector< std::shared_ptr<myClass_safe > >& v_registrants )
    {
        v_registrants.push_back( my_shared_ptr );  
    }
};
// register the object
object->Register( object, v_registrants );
class myClass_safe : public std::enable_shared_from_this<myClass_safe> {
public:
    void Register( std::vector< std::shared_ptr<myClass_safe > >& v_registrants )
    {
        v_registrants.push_back( shared_from_this() );
    }
};