阅读本主题 C++ interview preparation (马特回答)我有一个关于boost :: shared_ptr的问题。 shared_ptr真的可能泄漏内存吗?怎么样?
答案 0 :(得分:3)
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
); 答案 1 :(得分:1)
循环参考;引用计数垃圾收集器的常见问题。
我建议您阅读以下内容:http://www.codeproject.com/KB/stl/boostsmartptr.aspx#Cyclic参考文献
答案 2 :(得分:0)
shared_ptr是一个引用计数机制。一个带有引用计数的问题是你可以拥有一个没有人提到的循环引用链。除非有一种“打破链条”的机制,否则你的链永远不会被释放。