【发布时间】:2014-07-10 23:06:10
【问题描述】:
Here我看了一个会泄露内存的例子
void foo(std::shared_ptr<int> p, int init)
{
*p = init;
}
foo(std::shared_ptr<int>(new int(42)), seed()); // assume seed() returns an int
文章说如果seed()抛出,那么就会出现内存泄漏。我不明白怎么做?
如果先创建shared_ptr,然后seed() 抛出异常,在堆栈展开期间,临时的shared-ptr 将被销毁,释放内存。如果seed()事先抛出错误,那么一开始就不会分配。
我错过了什么?
【问题讨论】:
-
这将解释为什么 => herbsutter.com/gotw/_102
-
简短回答:
new int(42)可以在seed()执行之前执行,并且在其结果绑定到函数参数之前执行。
标签: c++ memory-leaks shared-ptr