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()
事先抛出错误,那么一开始就不会进行分配。
我缺少什么?
最佳答案
执行顺序可以是
auto temp = new int(42);
auto temp2 = seed(); // if throw exception, temp is leaked
auto temp3 = std::shared_ptr<int>(temp);
foo(temp3, temp2);
关于c++ - 这段代码中如何发生内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23797875/