You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

是否需要手动调用析构函数释放动态分配内存?(附C++数组ADT代码)

问题解答

1. 是否需要手动调用析构函数?

不需要。你在main里创建的Array arr(sz)是栈上的自动对象,当程序执行到main函数末尾(作用域结束)时,C++会自动调用它的析构函数~Array(),其中的delete []A;会正确释放动态分配的数组内存,不会出现内存泄漏。

手动调用析构函数(比如arr.~Array();)完全没必要,甚至会触发双重释放的未定义行为——因为对象在作用域结束时还会自动调用一次析构函数,同一块内存被释放两次会导致程序崩溃或异常。

2. 你的代码存在一个严重错误

看构造函数的实现:

Array::Array(int sz)
{
    sz = size;  // 这里写反了!正确写法是 size = sz;
    A = new int [sz];
}

你把参数sz赋值给了未初始化的成员变量size,导致sz变成垃圾值,后续用这个垃圾值分配数组内存,大概率会触发程序崩溃或内存错误。必须改成size = sz;,将传入的合法大小赋值给成员变量size。

补充说明

如果是用new创建的堆上对象(比如Array* arr = new Array(sz);),这时需要手动调用delete arr;来释放对象——delete操作会自动调用析构函数,再释放对象本身的内存。但你的代码里用的是栈对象,完全不需要手动干预。

内容的提问来源于stack exchange,提问作者Pranav Kumar Tripathi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 16:27:38