我有一个抽象的Entity类。我在游戏循环中使用指向Entity的指针的std :: vector,以便创建可以在游戏中动态扩展Entity的类的对象。 我想避免内存泄漏,所以我想释放向量占用的内存。
够了吗?
GameLoop::~GameLoop() {
int n = entities.size();
for (int i = 0; i < n; i++)
entities.pop_back();
}
实体是
std::vector<Entity*> entities
答案 0 :(得分:2)
for (int i = 0; i < n; i++)
entities.pop_back();
一种更短,更快的方法是entities.clear()
。
假设entities
是成员,则甚至不需要清除它:该对象即将被销毁,它的成员将被销毁,vector会自动清除其元素。
但是请注意,如果向量中的指针拥有指向的对象,则确实会泄漏内存,因为指针将不复存在,因此不再拥有先前拥有的对象。
为了使拥有的指针释放由new
进行的动态分配,您必须delete
指针。但是,您不应该使用拥有的裸露的Poitners(除非,例如,如果您正在实现循环返回其自身的链表)。改用智能指针和RAII容器。
P.S。除非基的析构函数是虚拟的,否则通过指向基的指针删除对象的行为是不确定的。