删除指向抽象类的指针的向量

时间:2019-12-02 17:41:53

标签: c++ memory vector std

我有一个抽象的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

1 个答案:

答案 0 :(得分:2)

for (int i = 0; i < n; i++)
    entities.pop_back();

一种更短,更快的方法是entities.clear()

假设entities是成员,则甚至不需要清除它:该对象即将被销毁,它的成员将被销毁,vector会自动清除其元素。

但是请注意,如果向量中的指针拥有指向的对象,则确实会泄漏内存,因为指针将不复存在,因此不再拥有先前拥有的对象。

为了使拥有的指针释放由new进行的动态分配,您必须delete指针。但是,您不应该使用拥有的裸露的Poitners(除非,例如,如果您正在实现循环返回其自身的链表)。改用智能指针和RAII容器。

P.S。除非基的析构函数是虚拟的,否则通过指向基的指针删除对象的行为是不确定的。

相关问题