如何在此代码中发生内存泄漏

时间:2014-05-22 04:34:11

标签: c++ memory-leaks shared-ptr

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()抛出错误,那么首先就没有分配。

我缺少什么?

1 个答案:

答案 0 :(得分:2)

执行顺序可以是

auto temp = new int(42);
auto temp2 = seed(); // if throw exception, temp is leaked
auto temp3 = std::shared_ptr<int>(temp);
foo(temp3, temp2);