3.0rc中关于内存管理的一个问题

testcpp中的sprite测试类中的方法

void SpriteTestDemo::backCallback(Ref* sender)
{
auto s = new SpriteTestScene();
s->addChild( backSpriteTestAction() );
Director::getInstance()->replaceScene(s);
s->release();
}

2.x中,我记得都是采用
delete(s);
s = nullptr;这种方式释放内存的

上面封装的release方法中,当计数器=0的时候,delete this
就完了,并没有对s赋值为 nullptr ,我想请教的是 如果不执行s = nullptr;
会不会造成 s成为一个 悬空指针

求教!

void SpriteTestDemo::backCallback(Ref* sender)
{
auto s = new SpriteTestScene(); // ref = 1
s->addChild( backSpriteTestAction() );
Director::getInstance()->replaceScene(s); // ref = 2
s->release(); // ref = 1
}

这样release之后,其实还有1个引用计数,所以不会是野指针,而且S是一个局部变量,出了函数就不会使用了。

@colinsusie 这里new 出来的是指针,不是智能指针,出了函数ref还是1,就是内存泄漏了。

楼主的问题,如果 release函数里已经调用delete了,就不会成为悬空指针了。
assign一个null可以防止别的地方引用这个指针,如果确定不会再被引用,不赋也没关系。

有些引擎用的是智能指针,需要赋个null值清引用。cocos2d-x不需要。