以前書いたCComPtrをCOMインタフェースでないクラスに対して使うのは要注意について、Visual C++ 2012でこの問題が直っていました。
ソースコードを見たところ、代入演算子の実装が改善されていました。すなわち、問題だったAtlComPtrAssignを使用しないようになっていました。
T* operator=(_Inout_ const CComPtr<T>& lp) throw() { if(*this!=lp) { CComPtr(lp).Swap(*this); } return *this; } |
コピーコンストラクタとSwapの組み合わせという、きわめて一般的な実装に変更されています。参照カウントがあるので、thisとの比較も妥当だと思います。
これで安心してCComPtrが使用できます。また、このバージョンからムーブコンストラクタ・ムーブ代入演算子も実装されていて満足です。
スポンサード リンク |