繁体   English   中英

C ++ STL向量载体和内存管理

[英]C++ STL vector of vectors and memory management

我们有一个场景,需要创建一个

std::vector<std::vector<float>> data;

因为向量的长度并不相同。

释放数据后,数据中的每个向量都会释放其空间吗?

所有标准库类型都适当地实现了RAII。 也就是说,在对象被销毁时,它们执行的任何类型的内部动态分配都将自动清除。 您无需担心。

对于标准容器,例如std::vector ,它将自动确保其每个元素都被销毁。 当然,如果std::vector的元素本身是std::vector ,它们将依次破坏其元素。 一切都是自动的。

您可能已经看到示例,其中有一个std::vector<T*> ,然后使用new手动分配了T对象。 重要的是要在这里意识到向量的元素不是T对象,而是T*对象。 指针将自动清除。 由于您手动分配了T对象,因此您需要手动取消分配它们。 (正如@Veritas在评论中所说,在这种情况下,您应该更喜欢使用智能指针)

是,每当“数据”的“作用域”结束时,将自动调用析构函数,并释放为“数据”分配的内存。 每当调用析构函数获取向量时,就会调用析构函数的每个元素。

假设向量a(5)在这里将调用a [0],a [1],...的析构函数。

类似地,在上述情况下,vector <vector> x; x [0],x [1]的析构函数将被连续调用。

但是这里每个元素x [i]还是一个向量,因此将再次调用x [i] [0],x [i] [1] ...的析构函数。

这样,所有元素都将被递归销毁。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM