正确删除一组指针

Properly deleting a Deque of Pointers

本文关键字:一组 指针 删除      更新时间:2023-10-16

我有一个简单的问题。我有一个问题,

std::deque<NPC*> enemyList 

其包含动态分配的NPC对象。每个NPC对象还有一个指向动态分配的Path和Shape对象的指针句柄,可以通过NPC类的getShape()和getPath()访问器访问该对象。

这就是我目前在这种情况下释放内存的方式:

while (enemyList.size() != 0) //delete npc's
{
    Shape3D *sPtr = enemyList.back()->getShape(); 
    Path *pPtr = enemyList.back()->getPath();
    NPC *npcPtr = enemyList.back();
    enemyList.pop_back();
    delete sPtr;
    delete pPtr;
    delete npcPtr;
}

这段代码编译起来似乎很好,但我不确定它在技术上是否正确。这样做合适吗?如果不合适,还有什么更好的方法可以达到预期效果?

谢谢!

只要不抛出异常,这应该可以正常工作。你真正想要使用的是一组智能指针,每当它们超出范围时,它们就会删除自己。

或者更好的是,指针容器,每次提升。