在 std::stack 个指针上调用 delete
Calling delete on std::stack of pointers
我有一个 std::stack
里面有一些指针:
std::stack<State*> m_states;
当我初始化我的程序时,我调用 new
将一个项目压入堆栈(它必须是一个指针,因为我将使用多态类型)。
这是删除所有内容的正确方法吗?
这里是我调用 new(GameState
和 MenuStatesare classes inherited from
State`)的地方:
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
容器。也就是说,堆栈没有 []
运算符 - 您只能访问顶部元素。
我有一个 std::stack
里面有一些指针:
std::stack<State*> m_states;
当我初始化我的程序时,我调用 new
将一个项目压入堆栈(它必须是一个指针,因为我将使用多态类型)。
这是删除所有内容的正确方法吗?
这里是我调用 new(GameState
和 MenuStatesare classes inherited from
State`)的地方:
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
容器。也就是说,堆栈没有 []
运算符 - 您只能访问顶部元素。