リファレンスカウンタ周りのエラー。
基本的にcocos2d-xのクラスはRef
クラスを継承していて、リファレンスカウンタの仕組みを使用している。
Node#create
でインスタンスを生成する((new
はスコープで制限されてるので呼べない))とRef#autorelease
状態のインスタンスを取得できるが
クラスのメンバ変数は、自分でreleaseさせたいので、自分でリファレンスカウンタを意識する必要がある。
これがちゃんとなっていない所為で上記のエラーメッセージが出てたのでメモ。
とはいえ、カウンタを操作するRef#retain
やRef#release
は、自分で呼びたくないので、マクロを使います。
//Part.h class Part : public cocos2d::Node { public: CC_SYNTHESIZE_RETAIN(cocos2d::Sprite*, _sprite, Sprite); }; }
・CC_SYNTHESIZE_RETAIN
で宣言すると、内部的にRef#retain
を呼んでくれる。setter,getterも自動で作られる。
//Part.cpp Part::Part(Vec2* pos) : _pos(pos), _sprite(NULL) //まずnullを初期設定 { //画像をセット。テクスチャアトラスからとってきてます。 this->setSprite(Sprite::createWithSpriteFrameName("snake_down.png")); } Part::~Part() { CC_SAFE_RELEASE_NULL(_sprite); }
・デストラクタでCC_SAFE_RELEASE_NULL
呼んで、Ref#release
する。