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ヘルプ。これは読むべき。