0

c ++ / boost useはすべて、スマートポインターを新しいインスタンスに簡単にリセットできることを知っています(古いインスタンスは同時に破棄します)。COMスマートポインタに対してどのようにそれを行うのか疑問に思っていますか?

_COM_SMARTPTR_TYPEDEF(IMyClass、__uuidof(IMyClass));

//normal class A
class A{

  IMyClass m_spIMyClassObj; //this COM smart pointer is a member variable of a normal class
};

COMスマートポインタを次のように初期化します。

m_spIMyClassObj.CreateInstance(__uuidof(MyLib::IMyClass));

これは問題ありませんが、Aの存続期間中に、COMスマートポインターm_spIMyClassObjをIMyClassの新しいインスタンスにリセットする必要があります。これを行うにはどうすればよいですか(古いIDがクリーンアップされていることも確認してください)。

ありがとう

4

2 に答える 2

5

m_spIMyClassObj.CreateInstance(__uuidof(MyLib::IMyClass));もう一度 お電話ください。m_spIMyClassObj新しいインスタンスを指すように再割り当てされ、古いインスタンスの参照数が1つ減ります。元のオブジェクトに未解決の参照がない場合は、それ自体が破棄されます。

于 2012-05-04T15:14:09.273 に答える
0

Releaseを呼び出してから、CreateInstanceを再度使用します。

于 2012-05-04T14:52:26.470 に答える