gpt4 book ai didi

c++ - 将此指针作为 weak_ptr 传递给内部类

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:49:26 25 4
gpt4 key购买 nike

我正在尝试找出一种在我的代码中使用 shared_ptr 和 weak_ptr 的方法。我有两个类——一类和二类。两个在一个内部类中。类 2 的构造函数接受类 1 的 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”指针,认为它是它的唯一所有者。

我该如何解决这个问题?还是我的程序在架构上不正确?任何建议将不胜感激。

谢谢,
图沙尔

最佳答案

I don't want to make it compulsory for my library users to create the object on the heap as a shared pointer.

那么你的内部类不能需要一个weak_ptrweak_ptr 的使用需要使用shared_ptr;它依赖于 shared_ptr 创建的机制来知道指针何时被销毁。因此,如果您不希望用户必须使用 shared_ptr,则您不能做任何期望将类包装在 shared_ptr 中的操作。就像从中创建一个 weak_ptr 一样。

因此,如果您希望用户无法在堆上创建这些对象,则需要使您的内部类独立于 weak_ptr

您可以尝试强制用户将他们的堆栈对象包装在使用特殊删除器的 shared_ptr 中。但这比堆分配要烦人得多。

关于c++ - 将此指针作为 weak_ptr 传递给内部类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18092184/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com