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()
抛出错误,那么首先就没有分配。
我缺少什么?
答案 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);