c++ - function(new Foo()) 之类的函数是否存在内存泄漏?

标签 c++ memory-leaks

最近在写分层状态机。我想在转换到另一个超状态时设置一个初始子状态。

因此我有如下代码来设置初始状态。第一版

void Foo::setInitialSubState(State* next_state){
  if(state_)
    delete state_;

  state_ = next_state;
  state_->enter(*this);
}

然后我发现 if(state_) 总是返回 true.. 所以我删除了它。此函数在构造函数 Foo::Foo() 中调用。

Foo::Foo()
{
  setInitialSubState(new State());
}

想删除state_时出现segment fault错误。所以我在构造函数中初始化成员 var state_。

Foo::Foo()
{
  state_ = 0;
  setInitialSubState(new State());
}

这将解决段错误问题。

我想知道我在使用setInitialSubState(new State())时是否存在内存泄漏问题?我想不通.. 如何更改 if(state_) 以避免 delete() 导致段错误?

谢谢你的建议..

----编辑----

为了让自己更清楚内存泄漏部分,我想我可以将问题改写为

 void Foo::setInitialSubState(State* next_state)
{
  state_ = next_state;
  delete state_;
}

Foo::Foo()
{
  state_ = 0;
  setInitialSubState(new State());
}

是否有内存泄漏?

最佳答案

最初 state_ 的未初始化指针有一些值,这就是为什么 if(state_) 进入并尝试 delete 一些随机指针。

在零指针上调用 delete 是安全的,这就是您的修复工作的原因。

关于内存泄漏:如果没有 Foo 类的析构函数那么你可以有一个,但为了确保你应该发布更多代码..

关于c++ - function(new Foo()) 之类的函数是否存在内存泄漏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31647040/

相关文章:

objective-c - 多少内存泄漏(以字节为单位)可能是致命的

iphone - 释放tableview ios iphone中的所有单元格

java - 如何检测在 Netbeans 中进行分析时未显示的内存泄漏?

c++ - Caffe 中的批处理模式 - 没有性能提升

c++ - 模板类和预处理器指令

c++ - 从大 double 静态转换为整数时的奇怪行为

ios - 保存和获取在核心数据中消耗高内存 800MB 和 100% CPU/如何在 swift4 中批量插入和获取核心数据

ios - iOS 中的内存泄漏,AVPlayer 永远不会被释放

c++ - 最烦人的解析

c++ - C++ 中的动态(类型)二进制缓冲区?