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

使用delete[]释放vector数组时,是否会释放所有分配的内存?

问题描述

假设我创建一个std::vector数组,使用new为num_vectors个vector分配内存。在对随机vector元素执行若干push_back操作后,执行delete[]会发生什么?我想知道所有由new和push_back分配的内存是否都会被释放。相关代码如下:

int num_vectors = 123456;
std::vector<uint64_t>* arr_vecs;
arr_vecs = new std::vector<uint64_t>[num_vectors];

int random_ix;
int random_val = 999;

random_ix = 1;
arr_vecs[random_ix].push_back(random_val);

random_ix = 88;
arr_vecs[random_ix].push_back(random_val);

random_ix = 123;
arr_vecs[random_ix].push_back(random_val);

delete[] arr_vecs;

说明:此问题并非探讨现代C++的实践优劣,仅针对该具体场景提问。看起来内存似乎会被释放,但我希望能更清晰地理解预期行为。

解答

执行delete[] arr_vecs时,会按顺序完成两个核心操作,确保所有内存被正确释放:

  • 调用数组中每个std::vector的析构函数:
    不管vector是否被用过,delete[]都会遍历数组里的每一个vector实例并调用其析构函数。对于执行过push_back的vector,析构函数会自动清理它内部存储元素的堆内存(也就是push_back时分配的缓冲区);对于空vector,析构函数也会正常执行(空vector本身不持有额外堆内存,不会有额外的资源释放操作)。
  • 释放new[]分配的数组本身的内存:
    在所有vector的析构函数执行完毕后,delete[]会回收用来存储这num_vectors个std::vector对象的原始堆内存(每个vector对象本质是包含指针、大小、容量的小型控制块)。

结论:所有由new[]分配的数组内存,以及所有vector通过push_back分配的内部元素内存,都会被完全释放,不会产生内存泄漏。这是std::vector的标准行为——它的析构函数负责管理自身内部资源,而delete[]会自动处理数组中每个对象的析构逻辑,再释放数组整体内存。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 17:15:12