19
請考慮以下代碼。如何通過shared_ptr避免內存泄漏?
using boost::shared_ptr;
struct B;
struct A{
~A() { std::cout << "~A" << std::endl; }
shared_ptr<B> b;
};
struct B {
~B() { std::cout << "~B" << std::endl; }
shared_ptr<A> a;
};
int main() {
shared_ptr<A> a (new A);
shared_ptr<B> b (new B);
a->b = b;
b->a = a;
return 0;
}
有沒有輸出。 沒有引號。內存泄漏。我始終認爲,智能指針有助於避免內存泄漏。
如果我需要類中的交叉引用,該怎麼辦?
@Alexey,這裏有一個鏈接指向文檔,它在介紹中明確提出了這個問題。 http://www.boost.org/doc/libs/1_41_0/libs/smart_ptr/shared_ptr.htm – Glen 2009-12-01 15:32:01
哪一個?爲什麼不用弱引用替換它們呢?這是荒唐的。 'shared_ptr'被使用是有原因的。 – curiousguy 2011-10-09 02:10:50
@curiousguy:我不確定我是否理解你的問題:你認爲什麼是荒謬的?要打破一個循環,你必須用一個弱引用來替換_one_強引用;哪一個完全取決於用例。你不能用弱引用替換所有的強引用,因爲這樣所有的對象都將被銷燬,因爲沒有所有者離開。 – 2011-10-09 04:54:29