簡體   English   中英

使用boost :: shared_ptr進行賦值的問題(與reset()函數相比)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM