【发布时间】:2020-03-27 08:56:14
【问题描述】:
我有一个抽象的实体类。我在游戏循环中使用指向 Entity 的指针的 std::vector,以便我可以创建在游戏期间动态扩展 Entity 的类的对象。 我想避免内存泄漏,所以我想释放vector占用的内存。
这就够了吗?
GameLoop::~GameLoop() {
int n = entities.size();
for (int i = 0; i < n; i++)
entities.pop_back();
}
实体在哪里
std::vector<Entity*> entities
【问题讨论】:
-
任何你
new,你需要delete,但在可能的情况下更喜欢自动存储或智能指针。 -
很遗憾,这是否“足够”只有你自己能判断。如果这些对象仍将在其他地方引用,这将不起作用,显然因为这会留下悬空指针。如果这些对象还拥有其他一些动态范围的对象,并且它们的析构函数不会删除它们,那么这也是不够的。您需要充分了解您的整个应用程序如何使用这些对象、何时构造它们以及何时不再在任何地方使用它们,以确定显示的代码是否“足够”。
-
您可能想使用
std::unique_ptr。