从 C++ 中的堆栈容器中删除自定义对象

Posted

技术标签:

【中文标题】从 C++ 中的堆栈容器中删除自定义对象【英文标题】:Deleting custom Object from Stack container in C++ 【发布时间】:2021-11-10 04:22:29 【问题描述】:

我有一个标准的树节点,由 3 个指向它自己类型和字符值的对象的指针组成。我正在尝试使用标准 C++ 堆栈容器将该树转换为堆栈进行解析。

以下是正常工作的一段代码。

 stack<Node*> temp;
 Node* trash;
...
 trash = temp.top();
 temp.pop();        
 delete(trash);
...

这可以执行我需要的操作,而不会出现任何内存泄漏;但是,如果我只使用

 temp.pop();

它会在这个地方产生内存泄漏。为什么这样做?这是默认构造函数的问题吗?如果可能的话,需要做什么才能将其减少到第一个选项?或者这是执行此操作的“正确”方式?

【问题讨论】:

如果要弹出删除对象,请使用智能指针堆栈。 【参考方案1】:

您正在堆栈中存储指针。第一个代码示例正确地清理了指针指向的内存。 pop 本身不会这样做。它只是从堆栈中删除指针本身。

【讨论】:

以上是关于从 C++ 中的堆栈容器中删除自定义对象的主要内容,如果未能解决你的问题,请参考以下文章

在 Swift 中访问共享容器中的自定义对象

用于组合容器和自定义逻辑的 C++ 技术/库?

使用 Chef 12 从 AWS OpsWorks 中的堆栈设置获取自定义 JSON

自定义堆栈分配器中的 C++ 内存对齐

从数组中删除自定义对象 (Swift)

根据自定义对象属性从数组列表中删除元素