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

C++动态分配int数组调用delete[]的运行时间复杂度是多少

int数组调用delete[]的执行逻辑说明

针对你给出的代码:
int* x = new int[n];
调用delete[] x时的实际执行逻辑如下:

核心结论

不需要为每个int元素调用析构函数,仅释放整块申请的内存即可,运行时间为O(1)。

具体依据

  • int属于C的内置标量类型,是平凡可析构类型,C标准明确规定这类类型不需要执行析构函数逻辑,所以delete[]时不会遍历数组逐个处理元素。
  • 内存分配器(比如操作系统的堆分配器、C++运行时的malloc实现)会记录new int[n]申请的整块内存的大小,释放时直接将整块内存归还到分配器即可,操作耗时和数组长度n无关,因此是O(1)复杂度。
  • 只有当数组存储的是非平凡可析构类型(比如自定义了析构函数的类、std::string、std::vector等标准容器)时,delete[]才会额外遍历数组逐个调用元素的析构函数,这部分逻辑的耗时为O(n),但后续释放整块数组内存的操作依然是O(1)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 10:06:04