あれ?cocos2d-xのライブラリ内でNULLチェック後にdelete?
前に最底辺の私がこんなことを書いてしましましたが、
http://koheizidaigorou.blog.fc2.com/blog-entry-52.html
なんかcocos2d-xのコードを追っていたら、NULL判定をしてから、
deleteしている箇所がありましたよ。
CCPlatformMacros.h
... #define CC_SAFE_DELETE(p) do { if(p) { delete (p); (p) = 0; } } while(0) #define CC_SAFE_DELETE_ARRAY(p) do { if(p) { delete[] (p); (p) = 0; } } while(0) #define CC_SAFE_FREE(p) do { if(p) { free(p); (p) = 0; } } while(0) #define CC_SAFE_RELEASE(p) do { if(p) { (p)->release(); } } while(0) #define CC_SAFE_RELEASE_NULL(p) do { if(p) { (p)->release(); (p) = 0; } } while(0) #define CC_SAFE_RETAIN(p) do { if(p) { (p)->retain(); } } while(0) ...
俺もしかして間違っているかしら?
一部プラットフォームでは、C++規約を無視してdeleteにNULL値渡すとヤバイとかあるのか??
ああ、ちなみにこのdefineで記載されている do { … } while(0)が意味不明ですが、
これは、if文などを含む時のお作法です。
試しに以下のような処理動かそうとすると楽しいことが置きます。
#define TRANSLATE_COLOR(c) if (c) { c=0x000000; } else { c=0xffffff } ... if (isBlue) TRANSLATE_COLOR(color); else TRANSLATE_COLOR(color); ...
まあ、if文に全部{}付けておけば大抵問題は起きないけどね。
ディスカッション
コメント一覧
まだ、コメントがありません