我一直致力于实现n-body问题,我必须制作一个结构(小行星)和一个包含这些结构的向量。
我的问题是,如果我创建这样的矢量:
vector<asteroid> b(n_asteroids + n_planets);
然后我这样填写:
for (it = 0; it < n_asteroids + n_planets; ++it){
b[it] = {arg1, arg2, arg3...}
}
我是否需要为小行星结构或向量调用删除?或者,当我的程序结束时,析构函数会释放它们吗?
谢谢!
答案 0 :(得分:2)
您的vector有一个自动存储类,这意味着当它超出范围时,它将占用的内存将被释放。这意味着矢量的内容也将被释放。
如果向量保留了动态指向的指针,那么您需要delete
。
答案 1 :(得分:2)
您不需要删除矢量,因为您没有使用new来分配它。关于向量成员,来自http://www.cplusplus.com/reference/vector/vector/~vector/
这会在每个包含的元素上调用allocator_traits :: destroy,并使用其分配器释放向量分配的所有存储容量。
所以答案对你来说是不对的。
但请注意,如果您在向量中保留指针,例如您使用new分配的vector<asteroid *>
,并且您没有任何对此指针的引用,您需要手动删除它。