SAFE_RELEASEマクロ改良
before
#define SAFE_RELEASE(p) { if(p){ (p)->Release(); (p)=NULL; } }
after
template <typename T> inline void release(T *&p){ if(p){ p->Release(); p = NULL; } }
なんとなく
IUnknown *&p
って書いたら無理だったので(参照にアップキャストとかねーよ)自己封印していた禁断のテンプレートを持ち出してきました。
NULLより0の方がかっこいい?でもC/C++両用APIだとつまりはC向けで全体的にNULLが多くなっちゃうのよね。
テンプレートとか書かないことにしてるのでこれでいいのかわかりません。教えて><
正直スマートポインタ使いたいけどCComPtrってのはATLだしshared_ptrだとCOMのAddRef/Releaseを無視しちゃう。boost::intrusive_ptrがぴったりなんだけどtr1には入ってないという。まあCOMの参照カウントなんて知ったことじゃないからshared_ptrにRelease()するデリータ渡せばいいと思うけどね!!boostの例にも載ってるし。
http://msdn.microsoft.com/ja-jp/library/bb982198.aspx
ウホッ
VC++のTR1のMSDNヘルプ。これは読むべき。