c++ - 堆栈展开是否会释放在堆上分配的内存?

标签 c++ memory-management memory-leaks exception

如果我有以下内容:

try{
    int* i = new int(5);
    //exception thrown here
}
catch(const exception& e){
    //Do I need to delete the heap allocation here?
}

堆分配是在抛出异常之前不久进行的,作为堆栈展开的一部分,堆内存会被回收吗?还是会出现内存泄漏,我应该在 catch() 语句中处理这个问题?

最佳答案

不,在堆栈展开期间只会调用析构函数,不会有“手动释放”或类似的东西。你int会泄漏。为避免此类问题,请使用 RAII,例如,您可以使用 std::vector<int>而不是原始的 C 风格数组或 std::unique_pointer以你为例。通常认为避免“裸露”是好的做法new s 并且仅在资源处理程序的实现中使用它,如 std::vectorstd::unique_pointer .您描述的问题是其中一个更大的原因。

关于c++ - 堆栈展开是否会释放在堆上分配的内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25233449/

相关文章:

c++ - -1.#IND 是哪种 C++ 常量/宏?

angularjs - Angular 和 Typescript 内存泄漏

C 和 OpenCV 内存泄漏

c++ - 同步主线程和工作线程

c++ - 将 srand 用于随机种子时重复输出

c++ - 屏幕截图特定窗口

ruby - 每个内存效率与 Ruby 中的减少/注入(inject)

r - 使用 rbind append 数据帧的神秘问题

c - free() 是否设置 errno?

VB.Net XML文档内存管理