删除在C ++ 17中分配给堆的向量的规范方法

问题描述 投票:0回答:1

我已经搜索了堆栈溢出,但是以前的答案似乎已经过时,或者不是很清楚。

我的问题如下:

我想在向量中存储大量数据。为此,我将在堆上分配向量,如下所示:

#include <vector>
std::vector<int> *vector = new std::vector<int> (1000000000);

现在,假设我在大型矩阵计算中使用此向量。我现在要释放它。

在c ++ 17中执行此操作的规范方法是什么?

我知道对于数组来说,即兴演奏如下:

int *arr = new int[1000000000];
delete[] arr

stl向量的等效方法(最有效的方法是什么?

c++ performance vector stl heap
1个回答
0
投票

带有std :: vector的东西是数据在堆上always

因此,您不必在堆上分配向量本身。

std :: vector利用称为RAII(资源获取是初始化)的原理,这意味着当用完内存后,它将为您取消分配它。

因此,这样做就足够了

{
std::vector<int> x{};
for (size_t i = 0; i < 50000; i++) x.push_back(x);
} // x gets out of scope, memory is freed

您不必手动释放向量的内存。

现在,无论出于何种原因,您都将自己在堆上分配向量,那么您就必须delete vector。在这种情况下,我还是建议std :: unique_ptr>,因为它也使用了相同的原理(RAII)。

© www.soinside.com 2019 - 2024. All rights reserved.