inj*_*joy 7 c++ smart-pointers
我读了一本手册说(见http://en.cppreference.com/w/cpp/memory/shared_ptr/make_shared):
此外,
f(shared_ptr<int>(new int(42)), g())如果g抛出异常,可能导致内存泄漏.如果使用make_shared,则不存在此问题.
为什么会导致内存泄漏?
Mik*_*our 18
允许编译器按以下顺序评估该表达式:
auto __temp1 = new int(42);
auto __temp2 = g();
auto __temp3 = shared_ptr<int>(__temp1);
f(__temp3, __temp2);
Run Code Online (Sandbox Code Playgroud)
您可以看到,如果g()抛出,则永远不会删除已分配的对象.
使用时make_shared,在分配对象和初始化智能指针以管理它之间不会发生任何事情.