2016-12-08 21 views
4

我很困惑unique_ptr.release()unique_ptr版本是否會導致內存泄漏?

我的目標是將基類的unique_ptr投射到派生類的unique_ptr

所以我發現這個question 答案是

Derived *tmp = dynamic_cast<Derived*>(basePointer.get()); 
std::unique_ptr<Derived> derivedPointer; 
if(tmp != nullptr) 
{ 
    basePointer.release(); 
    derivedPointer.reset(tmp); 
} 

std::unique_ptr<Derived> 
    derivedPointer(static_cast<Derived*>(basePointer.release())); 

然後,我想知道發生在基指針basePointer.release();後。

在此基礎上question,我明白,這會導致內存泄漏。

對嗎?

回答

12

我說得對不對?

調用release()不漏任何東西,它只是預示着你正在服用的是控制。

如果從智能指針明確釋放指針後泄漏指針,即你的錯誤。

+0

所以如果我把指針指向另一個unique_ptr,它應該沒問題呢? – Marc

+0

是的,在你的代碼中,它的行爲與本傑明的表現完全一樣 - 我只是去尋求一般的答案而不是具體的。 – Useless

+0

非常感謝! – Marc

6

內存泄漏,當你失去跟蹤的最後一個指針到一個動態分配的對象刪除之前發生。由於您首先將指針複製到tmp,因此當您調用release()時,您並未忽略它。所以不,這裏沒有內存泄漏。

+0

非常感謝!正是我想確定的。 – Marc

相關問題