我正在尝试找出一种在我的代码中使用 shared_ptr 和 weak_ptr 的方法。我有两个班——一班和二班。One 的内部类中的两个。类二的构造函数接受类一的一个weak_ptr,如下所示,并将其存储起来以备后用。
Class One
{
Class Two
{
private:
std::weak_ptr<One> m_wptrOne;
public:
Two(std::weak_ptr<One> wptrOne)
{
m_wptrOne = wptrOne;
/* m_wptr is used later by class Two if not expired and valid ofcourse */
}
}; // End Class Two
.....
void foo()
{
std::shared_ptr sptrOne(this);
Two obj(sptrOne);
.... /* do my work */
} // Program crashes when foo terminates
}; //End Class One
当我的函数 foo 返回时我会崩溃,因为我认为“sptr”正试图释放“this”指针,认为它是它的唯一所有者。
我怎么解决这个问题?还是我的程序在架构上不正确?任何建议将不胜感激。
谢谢,
图沙尔