【发布时间】:2014-04-10 17:47:51
【问题描述】:
我遇到了一个需要std::weak_ptr 作为构造函数参数的类。问题是弱指针必须指向拥有正在创建的实例的shared_ptr。我不知道如何传递所述指针,因为 shared_ptr 本身仅在类构建后才被构造或分配。
struct SomeClass
{
SomeClass(std::weak_ptr<SomeClass> ptrToThis){...}
...
};
我尝试了以下方法将weak_ptr 传递给构造函数,但它失败了(我认为这是因为原始shared_ptr 在被分配后不再在内部使用相同的哨兵对象)
int main()
{
std::shared_ptr<SomeClass> shared;
std::weak_ptr<SomeClass> weak;
weak = shared;
shared = std::make_shared<SomeClass>(weak);
//this prints "1" (true)
std::cout << weak.expired();
return 0;
}
如何纠正这种情况?既然我可以修改原来的类,我是否应该以某种方式修改它,例如在构造后添加一个单独的函数来设置weak_ptr的值?
【问题讨论】:
-
为什么有人会将weak_ptr传递给自己?你想做什么?因为它是在 ctor 中创建的,所以您无论如何都不能将它集中到一个 ctor 中
-
您是否要重新创建
std::enable_shared_from_this? -
我对 C++11 还是很陌生,不知何故我不知道
std::enable_shared_from_this。乍一看,这似乎是一个完美的解决方案。
标签: c++ c++11 shared-ptr smart-pointers