Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/151.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 当boost::shared_ptr可能无法释放时?_C++_Boost_Memory Leaks_Shared Ptr - Fatal编程技术网

C++ 当boost::shared_ptr可能无法释放时?

C++ 当boost::shared_ptr可能无法释放时?,c++,boost,memory-leaks,shared-ptr,C++,Boost,Memory Leaks,Shared Ptr,读完这个话题 (马特的回答)我有一个关于boost::shared_ptr的问题。共享ptr真的有可能泄漏内存吗?如何?共享\u ptr是一种引用计数机制。引用计数的一个问题是,你可以有一个没有其他人引用的循环引用链。除非有“断链”的机制,否则链永远不会被释放。shared\u ptr使用引用计数,这意味着循环引用可能导致泄漏。具体地说: struct A { shared_ptr<A> other; }; shared_ptr<A> foo() { s

读完这个话题
(马特的回答)我有一个关于boost::shared_ptr的问题。共享ptr真的有可能泄漏内存吗?如何?

共享\u ptr是一种引用计数机制。引用计数的一个问题是,你可以有一个没有其他人引用的循环引用链。除非有“断链”的机制,否则链永远不会被释放。

shared\u 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;
}
结构A{ 共享(ptr)
  • 一个专注的团队
  • 作为最后手段,在适当的点手动清空指针(这会破坏异常安全)

  • 循环引用;引用计数垃圾收集器中的常见问题


    我建议您阅读以下内容:参考资料

    参考此:
    new boost::shared_ptr(new T());/o noez!
    @James McNellis:很好的示例:-D
    {boost::shared_ptr sp(new T());std::exit(0);}//o noez//o noez…也许不
    谢谢!从来没有过这样的情况,看起来很奇怪,最好避免周期。避免周期确实会让生活变得更容易,但有时它们是必要的,有时避免它们比处理它们要困难得多。是的,但这是一种罕见的情况,而且在这种情况下,周期需要使用sha红色的ptr更为罕见。弱的ptr看起来是一个很好的解决方案,但是阅读有关专用循环收集器的内容会很有趣。