[英]question on assignment with boost::shared_ptr (vs. the reset() function)
很抱歉,如果在某處明確回答這個問題,但我對我在線閱讀的文檔和文章感到有些困惑。
我看到我可以使用reset()函數釋放shared_ptr中的內存(假設引用計數變為零),例如,
shared_ptr<int> x(new int(0));
x.reset(new int(1));
我相信這會導致創建兩個整數對象,並且在這兩行的末尾,將從內存中刪除等於零的整數。
但是,如果我使用以下代碼塊怎么辦:
shared_ptr<int> x(new int(0));
x = shared_ptr<int>(new int(1));
顯然,現在* x == 1是真的,但原始整數對象(等於零)是從內存中刪除還是我泄漏了那個內存?
在我看來,這將是賦值運算符減少shared_ptr的引用計數的問題,但是對源代碼的一瞥似乎並不能解決我的問題。 希望有經驗或知識淵博的人可以幫助我。 提前致謝。
文檔很清楚:
shared_ptr & operator=(shared_ptr const & r); // never throws
效果:相當於
shared_ptr(r).swap(*this)
。
因此,它只是將所有權與您創建的臨時對象交換。 臨時然后到期,減少引用計數。 (如果為零,則解除分配。)
這些容器的目的是不泄漏內存。 所以不,你不需要擔心泄漏事情,除非你是故意搞砸事情。 (換句話說,你可能不需要懷疑Boost知道他們在做什么。)
你沒有泄露記憶。 將刪除第一個int對象的內存。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.