我有一个抽象类 Entity。我在游戏循环中使用了一个指向实体的指针的 std::vector ,这样我就可以创建在游戏期间动态扩展实体的类的对象。 我想避免内存泄漏,所以我想释放 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 会自动清除它的元素。
但是请注意,如果 vector 中的指针拥有指向的对象,那么您确实会泄漏内存,因为指针将不复存在,因此无法再删除以前拥有的对象。
为了让拥有指针释放由 new
进行的动态分配,您必须 delete
指针。但是,您不应该使用拥有裸指针(除非例如您正在实现一个循环回到自身的链表)。请改用智能指针和 RAII 容器。
附言通过指向 base 的指针删除对象的行为是未定义的,除非 base 的析构函数是虚拟的。
关于c++ - 删除指向抽象类的指针 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59144111/