gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 00:25:44 26 4
gpt4 key购买 nike

如果我有以下内容:

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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com