c++ 删除是否释放数组中向量分配的空间?

jaql4c8m  于 2023-05-30  发布在  其他
关注(0)|答案(1)|浏览(108)

假设我创建了一个向量数组,然后为num_vectors个向量分配内存。在对随机向量元素执行了一些push_back操作后,执行delete会发生什么?我想知道是否所有分配的内存(newpush_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++中的好/坏实践。我想问一个具体的问题。
看起来它被释放了,但是我希望对预期的行为有更好的直觉。

njthzxwz

njthzxwz1#

是的,delete操作符将调用数组的对象析构函数,并且在std::vector析构函数中释放vector分配的内存。

arr_vecs = new std::vector<uint64_t>[num_vectors];
//will create "num_vectors" of vectors calling default constructor for each 
delete[] arr_vecs;
//calls delete on each newed object which calls the destructor of the object

如果需要多维数组,建议使用向量的向量,或者可以创建一个1D数组,并通过简单的数学将N-D数组Map到1D。

相关问题