C ++ vector和struct free

时间:2017-11-19 14:00:51

标签: c++ vector struct

我一直致力于实现n-body问题,我必须制作一个结构(小行星)和一个包含这些结构的向量。

我的问题是,如果我创建这样的矢量:

vector<asteroid> b(n_asteroids + n_planets);

然后我这样填写:

for (it = 0; it < n_asteroids + n_planets; ++it){
  b[it] = {arg1, arg2, arg3...}
}

我是否需要为小行星结构或向量调用删除?或者,当我的程序结束时,析构函数会释放它们吗?

谢谢!

2 个答案:

答案 0 :(得分:2)

您的vector有一个自动存储类,这意味着当它超出范围时,它将占用的内存将被释放。这意味着矢量的内容也将被释放。

如果向量保留了动态指向的指针,那么您需要delete

答案 1 :(得分:2)

您不需要删除矢量,因为您没有使用new来分配它。关于向量成员,来自http://www.cplusplus.com/reference/vector/vector/~vector/

  

这会在每个包含的元素上调用allocator_traits :: destroy,并使用其分配器释放向量分配的所有存储容量。

所以答案对你来说是不对的。 但请注意,如果您在向量中保留指针,例如您使用new分配的vector<asteroid *>,并且您没有任何对此指针的引用,您需要手动删除它。