所以我有一个堆分配的向量向量:
std::vector<std::vector<int>>* matrix = new std::vector<std::vector<int>>();
将大量数据放入matrix
后。删除此对象的正确方法是什么?
delete matrix
是否释放所有内部向量?
答案 0 :(得分:6)
是delete matrix;
没问题。
您可能需要考虑是否需要动态分配矢量。向量总是将它们的数据存储在自由存储(堆)中,因此不需要动态分配它们。它们具有非常小的堆叠足迹。
如果您必须动态分配您的向量,那么您应该认真考虑使用智能指针,例如std::unique_ptr或std::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
的使用都不需要您在堆上创建它。我怀疑你的情况也一样。