删除堆分配的二维向量

时间:2016-07-17 19:38:24

标签: c++ memory-management vector

所以我有一个堆分配的向量向量:

std::vector<std::vector<int>>* matrix = new std::vector<std::vector<int>>();

将大量数据放入matrix后。删除此对象的正确方法是什么?

delete matrix是否释放所有内部向量?

2 个答案:

答案 0 :(得分:6)

delete matrix;没问题。

您可能需要考虑是否需要动态分配矢量。向量总是将它们的数据存储在自由存储(堆)中,因此不需要动态分配它们。它们具有非常小的堆叠足迹。

如果您必须动态分配您的向量,那么您应该认真考虑使用智能指针,例如std::unique_ptrstd::shared_ptr,然后您根本不需要致电delete

auto matrix = std::make_unique<std::vector<std::vector<int>>>();

答案 1 :(得分:2)

是的,确实如此。 delete matrix在返回内存之前调用std::vector<std::vector<int>>的析构函数。析构函数调用将调用其所有元素的析构函数std::vector<int>

此外,大多数std::vector的使用都不需要您在堆上创建它。我怀疑你的情况也一样。