最近在写分层状态机。我想在转换到另一个超状态时设置一个初始子状态。
因此我有如下代码来设置初始状态。第一版
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/