[英]When a boost::shared_ptr might not be freed?
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;
}
如果沒有人工干預(將other
指針之一都設置為NULL),則foo
返回的數據結構將永遠不會被釋放。
現在,這只是每個程序員都應該知道的事實。 越有趣的訪談對話是如何處理的。 選項包括:
通函; 引用計數垃圾收集器中的一個常見問題。
我建議您閱讀以下內容: http : //www.codeproject.com/KB/stl/boostsmartptr.aspx#Cyclic References
shared_ptr是一種引用計數機制。 一個帶有引用計數的陷阱是您可以擁有一個沒有其他人引用的循環引用鏈。 除非有一種“打破鏈條”的機制,否則您的鏈條永遠不會被釋放。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.