【发布时间】:2014-12-12 20:43:52
【问题描述】:
我正在开发一个基本的文本编辑器,我有 2 个 stacks,分别命名为 undo_stack 和 redo_stack。
当用户退出时,我想删除每个堆栈中的每个元素(指针)。到目前为止我尝试过的是......
堆栈包含命令(用户命令)指针。
while (!undo_stack.empty())
{
delete undo_stack.top();
undo_stack.pop();
}
while (!redo_stack.empty())
{
delete redo_stack.top();
redo_stack.pop();
}
这是正确的吗?它有时似乎对我有用,这让我想知道错误是在我的代码中还是在清除我的堆栈中。谢谢
【问题讨论】:
-
“它似乎有时对我有用” C++ 中的很多undefined behavior 都是这样工作的。有时有效,有时无效,有时甚至可能会擦除您的硬盘。
-
为什么不使用 unique_ptr 或 shared_ptr ?
-
你没有说你是在堆栈中存储对象还是指向对象的指针。如果是前者,它们将在堆栈销毁时自动删除。如果是后者,请将 unique_ptr
存储在您的堆栈中,您将获得相同的结果。 -
在我的课堂上还没有了解唯一 ptr 或共享 ptr。我的堆栈现在所做的......是当有人执行命令时,该命令存储在撤消堆栈中。如果他们撤消,则撤消命令被弹出并推送到重做。
-
除非您向我们展示您是如何定义堆栈的,否则无法正确回答这个问题。