c++ - 删除指向抽象类的指针 vector

标签 c++ memory vector std

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

相关文章:

Java 内存使用量在最大堆大小内保持良好,但我的系统内存正在慢慢被吃掉

与 vector 相比,C++ STL 队列内存使用情况?

c++ - 'auto' 关键字是否知道何时使用 const 迭代器?

C# 如何将点转换为 vector2?

java - Lotus Notes 的 Java API 中的方法返回 Vector 而不是 ArrayList

c++ - 尝试扩展 ctype facet 时出现 undefined reference 错误

c++ - 来自文件的着色器,程序停止工作

C++专业代码分析工具

c++ - 转换构造函数不会将 "2"转换为运算符 + 中的用户定义类型

c - 故障安全分配