gpt4 book ai didi

c++ - weak_ptr 和父子循环依赖

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

我目前有类似以下内容:

class Parent
{
//just a single child... for sake of simplicity
//no other class holds a shared_ptr reference to child
shared_ptr<Child> _child;
System * getSystem() {...}
}

class Child
{
weak_ptr<Parent> _parent;
~Child
{
_parent.lock()->getSystem()->blah();
}
}

Child 析构函数总是崩溃,因为当 ~Child() 运行时 _parent 总是过期。是否有针对这种怪现象的典型解决方案?

简而言之,有没有办法在 ~Child 完成之前不销毁 _parent?

最佳答案

因为在调用子对象的析构函数时,父对象的析构函数已经运行(成员对象的 dtor 在包含对象的 dtor 之后运行),即使子对象持有指向父对象的普通指针,在调用 ~Child() 时,调用父级的成员函数将无效。

您可以通过让 Child 在较早的时候调用 getSystem() 并缓存结果来解决这个问题。也许在 Child 的构造函数中(如果它当时有对 parent 的引用)或者也许可以添加一个接口(interface),以便 Parent 可以让 child 知道它需要从当时的 parent 那里收集销毁期间可能需要的任何东西。

我知道这些都不是很好的解决方案(它增加了对象的耦合)-希望有人会发布更好的选择。

关于c++ - weak_ptr 和父子循环依赖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4476011/

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