C++ 构造函数需要指向正在创建的实例的共享指针
我遇到了一个类,它需要一个C++ 构造函数需要指向正在创建的实例的共享指针,c++,c++11,shared-ptr,smart-pointers,C++,C++11,Shared Ptr,Smart Pointers,我遇到了一个类,它需要一个std::weak_ptr作为构造函数参数。问题是弱指针必须指向拥有所创建实例的共享\u ptr。我不知道如何传递该指针,因为shared\u ptr本身只是在类构造之后才被构造或分配给的 struct SomeClass { SomeClass(std::weak_ptr<SomeClass> ptrToThis){...} ... }; 如何纠正这一点?既然我可以修改原始类,我是否应该以某种方式修改它,例如在构建后添加一个单独的函数来设
std::weak_ptr
作为构造函数参数。问题是弱指针必须指向拥有所创建实例的共享\u ptr
。我不知道如何传递该指针,因为shared\u ptr
本身只是在类构造之后才被构造或分配给的
struct SomeClass
{
SomeClass(std::weak_ptr<SomeClass> ptrToThis){...}
...
};
如何纠正这一点?既然我可以修改原始类,我是否应该以某种方式修改它,例如在构建后添加一个单独的函数来设置
弱\u ptr
的值?您最好使用它,它是专为这种情况设计的
要使用它,请从中派生类。它将存储一个std::weak_ptr
,在第一次创建指向该对象的std::shared_ptr
时,该对象将被初始化为指向该对象:
struct SomeClass : public std::enable_shared_from_this<SomeClass>
{
//...
};
为什么有人会将弱ptr传递给自己?你想干什么?无论如何,您都无法将其聚集到一个ctor中,因为它是在ctor中创建的。您是否尝试重新创建它?我对C++11非常陌生,不知怎的,我不知道从这个中启用共享。快速一瞥,这似乎是一个完美的解决方案。
struct SomeClass : public std::enable_shared_from_this<SomeClass>
{
//...
};
struct SomeClass : public std::enable_shared_from_this<SomeClass>
{
std::shared_ptr<SomeClass> create()
{ return std::make_shared<SomeClass>(); }
private:
SomeClass()
{}
};