c++ - 这段代码中如何发生内存泄漏

标签 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() 事先抛出错误,那么一开始就不会进行分配。

我缺少什么?

最佳答案

执行顺序可以是

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/

相关文章:

c++ - 将位图设置为 IMediaSample

C++ shared_ptr 看不到类类型的成员函数

javascript - 即使在删除了 JavaScript 事件处理程序所绑定(bind)的 DOM 元素后,内存中是否仍存在该事件处理程序?

performance - d3.js 我应该在退出/删除时分离事件监听器吗?

c++ - 在 lambda [C++] 中捕获它的替代方法

c++ - typedef 具有静态自定义删除器的 shared_ptr 类型,类似于 unique_ptr

c++ - 覆盖boost中的验证方法不适用于样式集

c++ - 获取 std::future 的状态

javascript - 如何在 PPAPI 中将变量从 JavaScript 传递到 C++?

javascript - 无限循环中的NodeJS内存消耗