我在cocos2d-x v.2.2.2中添加了Player* _player
指向我的場景的指針。我已經定義了,所以它被引用計數。我對HelloWorldScene
創建方法看起來像這樣爲什麼不刪除cocosd2d-x中的最後一個場景觸發場景析構函數?
Scene* HelloWorldScene::createScene(Player* player)
{
auto scene = Scene::create();
auto layer = HelloWorldScene::create();
layer->_player = player;
player->retain();
scene->addChild(layer);
return scene;
}
其中player
在AppDelegate::applicationDidFinishLaunching()
實例化。現在,因爲我已經保留_player
(我今天感覺像一個不錯的傢伙),我已經決定將其釋放,以及:
HelloWorldScene::~HelloWorldScene()
{
if (_player)
{
_player->release();
}
}
到目前爲止好。然而,當HelloWorldScene
被彈出,以下稱爲
void Director::popScene(void)
{
CCASSERT(_runningScene != nullptr, "running scene should not null");
_scenesStack.popBack();
ssize_t c = _scenesStack.size();
if (c == 0)
{
end();
}
else
{
_sendCleanupToScene = true;
_nextScene = _scenesStack.at(c - 1);
}
}
所以,每當HelloWorldScene
在棧中的最後一個場景,它不會被破壞? (至少從XCode看起來就是這樣)
我不是C++特級大師,所以請原諒我的無知。然而,對我而言,這是非常意想不到的行爲。不應該在程序終止之前清理彈出的場景(通過讓_sendCleanupToScene = true
並讓它運行一次迭代)?
顯然,我錯過了一些東西......如果有人能夠對此有所瞭解,我會很高興! :)