2017-06-21 50 views
-2

我對共享指針的一個基本問題,在接下來的示例代碼:用operator =重新分配一個共享指針導致內存泄漏?

int main() { 
std::shared_ptr<int> sp; // empty 
std::shared_ptr<int> sp2; 
sp.reset (new int); 
sp2.reset (new int); 
*sp=10; 
*sp2=400; 
    sp2=sp; 

std::shared_ptr<int> sp3; 
sp3=sp1; 
//what happens with the int of value 400? 
//more code 
} 

什麼用的價值400 INT發生什麼呢?這是內存泄漏嗎?這是一個基本的例子,但如果不是int指針指向一個大類,那麼如果存在內存泄漏,則會出現問題,如果sp2重新分配的次數更多,則會出現問題。 謝謝!

+0

你是不是要編寫'* sp = 10'?如果你的意思是'sp = std :: make_shared (10);'會更有意義。 –

+0

對不起,忘了那些行 –

+2

當然沒有泄漏,因爲'sp2'是包含400的int的唯一所有者,它將在'sp2'獲得由'sp'擁有的內存的共享所有權之前被銷燬。 – Praetorian

回答

2

經過您的編輯,沒有任何泄漏。分配給int的值爲400的存儲器只會在分配中被刪除。