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



我有抽象的实体类。在游戏循环中,我使用指向实体的指针的 std::vector,以便我可以创建在游戏期间动态扩展实体的类的对象。 我想避免内存泄漏,所以我想释放矢量占用的内存。

这就够了吗?

GameLoop::~GameLoop() {
int n = entities.size();
for (int i = 0; i < n; i++)
entities.pop_back();
}

其中实体是

std::vector<Entity*> entities
for (int i = 0; i < n; i++)
entities.pop_back();

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

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

但请注意,如果矢量中的指针拥有指向的对象,那么您确实会泄漏内存,因为指针将不复存在,因此无法再删除以前拥有的对象。

为了使拥有指针释放由new进行的动态分配,您必须delete指针。不过,您不应该使用拥有裸的poitners(除非您正在实现一个循环回自身的链表(。请改用智能指针和 RAII 容器。

附言通过指向 base 的指针删除对象的行为是未定义的,除非 base 的析构函数是虚拟的。

最新更新