当 boost::shared_ptr 可能无法释放时?
读完这个话题后 C++ 面试准备 (马特的回答)我有一个关于 boost::shared_ptr 的问题。 Shared_ptr 真的有可能泄漏内存吗?如何?
Afer reading this topic
C++ interview preparation
(Matt's answer) I've got a question about boost::shared_ptr. Is it really possible for shared_ptr to leak memory? How?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
shared_ptr
使用引用计数,这意味着循环引用可能会导致泄漏。具体来说:如果没有手动干预(将
other
指针设置为 NULL),foo
返回的数据结构永远不会被释放。现在这只是每个程序员都应该知道的事实;更有趣的采访对话是如何应对。选项包括:
weak_ptr
);shared_ptr
uses reference counts, and that means circular references can cause leaks. Concretely:the data structure returned by
foo
will never be deallocated without manual intervention (set either of theother
pointers to NULL).Now this is just a fact that every programmer should know; the more interesting interview conversation is what to do about it. Options include:
weak_ptr
);循环引用;引用计数垃圾收集器中的一个常见问题。
我建议您阅读以下内容: http://www.codeproject.com/KB/ stl/boostsmartptr.aspx#Cyclic 参考文献
Circular references; a common problem in reference counting garbage collectors.
I suggest you read the following: http://www.codeproject.com/KB/stl/boostsmartptr.aspx#Cyclic References
shared_ptr是一种引用计数机制。引用计数的一个问题是你可能会拥有一个没有其他人引用的循环引用链。除非有一种机制可以“打破锁链”,否则你的锁链永远不会被释放。
shared_ptr is a reference counting mechanism. One gotcha with ref counting is you can have a circular chain of references no one else refers to. You chain will never get freed unless there's a mechanism to 'break the chain'.