2012-01-10 42 views

回答

5

簡單來說:

{ // Enter scope 

    shared_ptr<A> my_a(new A); 
    shared_ptr<B> my_b(new B); 

    my_a->remember_this_b(my_b); // Stores a copy of a smart pointer 
    my_b->remember_this_a(my_a); // Stores a copy of a smart pointer 

} // Leave scope. my_a and my_b are destroyed. 

如果這兩個函數存儲在shared_ptr的對象將永遠不會被刪除,因爲無論shared_ptr將達到零引用計數。

但是,如果其中任何一個使用weak_ptr,那麼weak_ptr指向的對象在離開作用域時將被銷燬。而這又會摧毀最後一個shared_ptr到另一個對象。