为什么当为T2抛出bad_alloc异常时,此代码中会发生内存泄漏
Why does a memory leak occur in this code when a bad_alloc exception is thrown for T2
如果T2抛出,为什么会导致T1内存泄漏?
//在某些头文件中:空隙f(T1*,T2*(;
//在某些呼叫站点:f(新T1,新T2(;
如果第二个对象的构造函数抛出异常,那么f()
将不会被调用,因此f()
内的代码将没有任何机会删除创建的第一个对象,也没有任何机会存储指向该对象的指针以供以后删除。
类似地,可能在引发异常后执行的代码(例如,在您可能设置用于处理异常的任何catch
处理程序块中(将无法访问指向任一对象的指针,因此也无法删除创建的对象。
因此,在这种情况下,对象或多或少不可避免地会泄漏。
(请注意,没有指定哪个函数参数将首先求值,因此在创建T2
后抛出T1()
也很容易,从而导致T2
对象泄漏(
(*(我想你可以做一些疯狂的事情,比如让T1()
和T2()
构造函数中的最后一行将它们的this
-指针存储到某个静态数据结构中,但这会非常难看,并引入许多其他问题;这个问题的正确解决方案是使用std::unique_ptr
或类似的方法来"捕获"对象,这样就不需要显式的delete
调用,因此无论何时抛出异常,都不可能发生内存泄漏。
相关文章:
- 为什么以下C++代码中存在内存泄漏?
- 无法找出我的代码中的内存泄漏
- 如何防止使用 std::shared_ptr 的代码中的内存泄漏
- 为什么当为T2抛出bad_alloc异常时,此代码中会发生内存泄漏
- 以下代码是否存在内存泄漏?
- C++/CLI 代码中的内存泄漏
- 客户端代码中的 Valgrind 钩子:特定函数的内存泄漏
- 我的C++代码中是否有一些内存泄漏
- 为什么 heob 在 QCreator 生成的代码中将这些检测为内存泄漏
- 尝试在我的 C++ 代码中查找内存泄漏
- 以下代码中的嵌入"new"是否会导致内存泄漏?
- 如何解决C++代码中的内存泄漏问题
- 泄漏测试代码shared_ptr奇怪的结果
- 内存泄漏在0行代码中
- 为什么在此OpenCL代码中泄漏内存,为什么要泄漏内存
- QaudioOutput代码是否有任何内存泄漏
- 此代码是否会导致内存泄漏问题
- RAII 失败 - 为什么此C++代码泄漏?- 在尝试块中加入 CTOR 阻止 DTOR
- 这C++代码泄漏内存吗?
- 这个Qt代码泄漏内存