为什么使用 shared_ptr 作为函数参数时会出现内存泄漏



我读过一本手册,上面写着(见 http://en.cppreference.com/w/cpp/memory/shared_ptr/make_shared):

此外,f(shared_ptr<int>(new int(42)), g())可能导致内存泄漏 如果 g 引发异常。如果make_shared 使用。

为什么会导致内存泄漏?

允许编译器按以下顺序计算该表达式:

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

您可以看到,如果抛出g(),则永远不会删除分配的对象。

使用make_shared,在分配对象和初始化智能指针来管理它之间没有任何关系。

相关内容

  • 没有找到相关文章

最新更新