在 std::stack 个指针上调用 delete

Calling delete on std::stack of pointers

我有一个 std::stack 里面有一些指针:

std::stack<State*> m_states;

当我初始化我的程序时,我调用 new 将一个项目压入堆栈(它必须是一个指针,因为我将使用多态类型)。

这是删除所有内容的正确方法吗?

这里是我调用 new(GameState 和 MenuStatesare classes inherited fromState`)的地方:

m_states.push(new GameState());
m_states.push(new MenuState());

这就是我在整个 App 的析构函数中所拥有的 class:

while (!m_states.empty())
{
    delete m_states.top(); // (*)
    m_states.pop();
}

我应该只调用 (*),还是还需要 pop()

Should I only call (*) or do I need to pop as well?

好吧,如果您 while 循环中调用 pop(),那么该循环将如何结束?换句话说,条件 !m_states.empty() 将如何变为 false?

还有其他容器类型(如 std::vector),您 可以 只是 运行 通过每个成员,删除指向的对象,然后清除容器,但不能使用 std::stack 容器。也就是说,堆栈没有 [] 运算符 - 您只能访问顶部元素。