以前書いた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が使用できます。また、このバージョンからムーブコンストラクタ・ムーブ代入演算子も実装されていて満足です。

スポンサード リンク

この記事のカテゴリ

  • ⇒ CComPtrのバグが直っていた
  • ⇒ CComPtrのバグが直っていた
  • ⇒ CComPtrのバグが直っていた