簡體   English   中英

使用shared_ptr作為函數參數時為什么會出現內存泄漏?

[英]Why is there memory leak while using shared_ptr as a function parameter?

我讀了一本手冊說(見http://en.cppreference.com/w/cpp/memory/shared_ptr/make_shared ):

此外,如果g拋出異常, f(shared_ptr<int>(new int(42)), g())可能導致內存泄漏。 如果使用make_shared,則不存在此問題。

為什么會導致內存泄漏?

允許編譯器按以下順序評估該表達式:

auto __temp1 = new int(42);
auto __temp2 = g();
auto __temp3 = shared_ptr<int>(__temp1);
f(__temp3, __temp2);

您可以看到,如果g()拋出,則永遠不會刪除已分配的對象。

使用make_shared ,在分配對象和初始化智能指針以管理它之間不會發生任何事情。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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