【问题标题】:C++ Delete elements inside stack?C ++删除堆栈内的元素?
【发布时间】:2014-12-12 20:43:52
【问题描述】:

我正在开发一个基本的文本编辑器,我有 2 个 stacks,分别命名为 undo_stackredo_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。我的堆栈现在所做的......是当有人执行命令时,该命令存储在撤消堆栈中。如果他们撤消,则撤消命令被弹出并推送到重做。
  • 除非您向我们展示您是如何定义堆栈的,否则无法正确回答这个问题。

标签: c++ memory stack


【解决方案1】:

假设您不是在多线程环境中工作,那么您用于清除堆栈和删除压入堆栈的指针的代码似乎没问题。如果没有更多的代码和输出,很难知道为什么它有时有效,有时无效,但我会怀疑以下情况之一:

  1. 您尝试删除的原始指针已被删除。
  2. 对象的析构函数中发生了与堆栈本身无关的一些故障。

您可以尝试通过调试器运行它并附加堆栈跟踪。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-11-07
    • 1970-01-01
    • 2021-08-06
    • 1970-01-01
    • 2021-05-27
    • 1970-01-01
    • 2020-08-03
    • 1970-01-01
    相关资源
    最近更新 更多