Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/162.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 构造函数需要指向正在创建的实例的共享指针_C++_C++11_Shared Ptr_Smart Pointers - Fatal编程技术网

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()
    {}
};