gpt4 book ai didi

c++ - 什么时候 boost::shared_ptr 可能不会被释放?

转载 作者:搜寻专家 更新时间:2023-10-31 01:20:22 29 4
gpt4 key购买 nike

阅读本主题后 C++ interview preparation(马特的回答)我有一个关于 boost::shared_ptr 的问题。 shared_ptr 真的有可能泄漏内存吗?怎么办?

最佳答案

shared_ptr 使用引用计数,这意味着循环引用会导致泄漏。具体来说:

struct A {
shared_ptr<A> other;
};

shared_ptr<A> foo() {
shared_ptr<A> one(new A);
shared_ptr<A> two(new A);
one->other = two;
two->other = one;
return one;
}

foo 返回的数据结构将永远不会在没有手动干预的情况下被释放(将任何一个 other 指针设置为 NULL)。

现在这只是每个程序员都应该知道的事实;更有趣的面试对话是如何处理它。选项包括:

  • 重新设计数据结构,不再需要指针循环;
  • 在每个循环中将至少一个指针降级为非拥有引用(裸指针或 weak_ptr );
  • 专用cycle collector ;
  • 作为最后的手段,在适当的点手动清空指针(这会破坏异常安全性)。

关于c++ - 什么时候 boost::shared_ptr 可能不会被释放?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4941531/

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