这里我读了一个可以泄漏内存的例子
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()预先抛出错误,那么首先就不会有分配。
我错过了什么?
发布于 2014-05-22 04:37:21
执行顺序可以是
auto temp = new int(42);
auto temp2 = seed(); // if throw exception, temp is leaked
auto temp3 = std::shared_ptr<int>(temp);
foo(temp3, temp2);https://stackoverflow.com/questions/23797875
复制相似问题