2
我遇到了一个需要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中创建的。 – Samuel
您是否试图重新创建['std :: enable_shared_from_this'](http://en.cppreference.com/w/cpp/memory/enable_shared_from_this)? – Angew
我对C++ 11相当陌生,不知何故我不知道'std :: enable_shared_from_this'。匆匆一瞥,这似乎是一个完美的解决方案。 – jms