【发布时间】:2011-04-18 00:47:36
【问题描述】:
我有一个创建对象向量的类。在这个类的解构器中,我试图释放分配给对象的内存。我试图通过遍历向量来做到这一点。所以,如果向量被称为我正在做的地图:
Building::~Building() {
int i;
for (i=0; i<maps.size(); i++) {
delete[] &maps[i];
}
}
当我运行此程序时,程序会在释放内存时出现段错误。我认为我正在做的实际上是删除存储对象的数组而不是对象本身。它是否正确?如果对我做错了什么没有任何想法?
【问题讨论】:
-
vector的类型是什么?从外观上看,您的vector包含对象,而不是指向对象的指针。如果是这种情况,那么您不要删除它们;vector负责所有的清理工作。 [当然很难说,因为这段代码并不完全是你使用的代码,因为size是成员函数,而不是成员变量;这段代码根本不起作用。] -
你的向量声明是什么样子的,更重要的是:你为什么要这样做?
-
您的意思是 std::vector 还是“vector”作为数组的替代名称?
-
向我们展示向量声明
-
由于
.size()的返回类型是size_t,最好使用size_t作为索引变量的类型(这里是i)。当然,除非您使用的是 C++0x,否则您可以使用auto。也更喜欢将“i”的范围限制在尽可能本地,例如仅在for循环内。最后选择不同的变量名,因为没有看到声明的人,可能会错误地认为maps是std::map的复数。
标签: c++ memory-management vector