gpt4 book ai didi

c++ - 如何正确删除 std::stack 中的指针?

转载 作者:行者123 更新时间:2023-11-28 05:10:45 24 4
gpt4 key购买 nike

所以,我对这个我想不通的东西很好奇。

我正在创建一些新对象并将它们传递给将它们存储在 std::stack 中的函数。

但是,当我想删除它们时 - 它们实际上并没有被删除,因此,内存使用量将在我的测试循环中“永远”攀升。

为什么?

bool StateMachine::changeState(BaseState *state) {
if (state == nullptr) {
delete states.top();
states.pop();
if (states.size() == 0) {
return false;
}
} else if (state != states.top()) {
states.push(state);
}
return true;
}

测试循环:

while (true) {
machine.changeState(new MenuState);
machine.changeState(nullptr);
}

使用 std::unique_ptr 而不是原始作品,现在 ram 的使用是恒定的,但仍然 - 我想知道。

干杯!

最佳答案

鉴于您提到的先决条件,您的代码应该是正确的,但请注意,您可以分配和删除对象而无需回收操作系统分配的内存,尤其是当您在内存中留下分配漏洞时。因此,请检查内存是否开始增长然后停止,以及其他地方是否存在内存泄漏,例如 BaseState 内部。

如果您对前提条件有疑问,请在您的 if 中添加一个 else 子句并打印一些内容。我永远不应该发生,但如果发生了,那么调用 states.top() 可能会出现问题。

关于c++ - 如何正确删除 std::stack 中的指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43553922/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com