根據我的理解,如果我們使用所有shared_ptr對象並且存在循環依賴關係,則會使用弱指針來發生循環依賴性問題。弱指針被用來打破週期。弱指針通過使用lock()來實現這一點,這將創建共享指針。weak_pointer.lock()會增加用於創建weak_ptr的原始shared_ptr的引用計數
class A { shared_ptr<B> b; ... };
class B { weak_ptr<A> a; ... };
shared_ptr<A> x(new A); // +1
x->b = new B; // +1
x->b->a = x; // No +1 here
但現在假設我創建鎖調用X-> B-> a.lock(),所以x的引用計數將成爲2.如果x離開的範圍,仍然會出現內存泄漏權?因爲我使用lock()創建了一個共享指針,並且ref count變爲2.請讓我知道我的理解是否正確。
當由lock()創建的對象被其析構函數銷燬時,它會再次遞減計數。 –
你對'lock()'的返回值做了什麼?如果您忽略它,鎖定會立即再次移除。 – aschepler
一個相當簡單的示例程序(https://ideone.com/3JQsaX)會告訴你發生了什麼。鎖()變得非常無用,因爲你正在使用它。 – WhozCraig