COMの管理クラス備忘録
とりあえず、てけとーにCOMスマートポインタクラスを作成。
持たせた機能は↓みたいな感じ。
アップキャストとか使ってて足りないと感じた機能があればがしがし追加予定。
・デストラクタ時にクラスで保持しているCOMインターフェースが !NULL だったらCOM参照カウンタをデクリメント(以下リソース解放と表記
→ 参照カウンタ=0の時はリソース解放される(最低限必要な動作)
・コピーコンストラクタ(参照渡し)時にCOMの参照カウンタを増加させる
・明示的なCOMインターフェースリソース(以下リソース)の解放クラスを備えさせる
→ この際に、EnableCreationStack とか使ってリソースリークしてないかVC++に出力させる(そのうち詳しく書きます)
・代入演算子をオーバーロードして、別のリソースを代入時にリソース解放をしてくれる
→ 未解放のCOMに別のリソース割り当ててしまった時に最低限の解放処理をしてくれる
→ その他、NULL 代入でリソース解放処理を行うようにしたり、代入演算子を色々とオーバーロード
・IDirect3DXXX インターフェイスへのポインタのアドレスを引数に取る関数に対応する
→ 引数渡し専用の getter 関数を実装(呼び出し時に一度リソース解放を行った後、インターフェイスへのポインタアドレスを返す)
色々やったけど、大人しく CComPtr 使っておけば良かった気もする。……まぁ勉強という事で。
通常のスマートポインタはboostでいいやなので、さくさくと上位クラス実装へ移行しよう。