繁体   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