2012-05-04 50 views
0

C++/boost使用所有知道我們可以很容易地重置智能指針到一個新的實例(舊的同時銷燬)。我想知道我們如何做到這一點的COM智能指針?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)。

感謝

回答

5

只需再撥打m_spIMyClassObj.CreateInstance(__uuidof(MyLib::IMyClass));即可。將重新分配m_spIMyClassObj以指向新實例,舊實例上的引用計數將減少1。如果原始對象上沒有未完成的引用,它將自行破壞。

0

就叫Release,然後再次使用的CreateInstance。

+0

無需調用發佈。根據[_com_ptr_t :: CreateInstance](http://msdn.microsoft.com/zh-cn/library/k2cy7zfz(v = vs.110).aspx)docs Release在舊實例上自動調用。 – user957902