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

C++复杂类型数组调用delete[]的内存释放规则咨询

问题解答

这两种数组的内存释放逻辑完全不同,分场景说明:

  • 场景1:数组存储的是类A的实例,且数组是通过new A[数组长度]的方式在堆上分配的
    这种情况下直接调用delete[]即可,不需要额外操作。delete[]会自动遍历数组的每个元素,依次调用类A的析构函数释放每个实例内部的资源,最后再释放整块数组的内存空间。
  • 场景2:数组存储的是类A的指针,且数组是通过new A*[数组长度]的方式在堆上分配的
    这种情况下必须先手动遍历数组,对每个通过new单独分配的类A实例指针执行delete arr[i]释放对应实例的资源,之后才能调用delete[]释放数组本身的内存。如果直接调用delete[],只会释放存储指针的数组的内存,每个指针指向的堆上的类A实例会完全泄漏,不会被回收。

注意:如果数组里的指针指向栈上实例、静态存储区实例或者其他非new分配的内存,不要执行delete arr[i],否则会触发未定义行为。

内容的提问来源于stack exchange,提问作者CS2000

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.17 03:45:04