c ++ / boost使用都知道我们可以轻松地重置一个指向新实例的智能指针(旧的实例同时销毁)。我想知道我们如何为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)。
由于
答案 0 :(得分:5)
只需再次致电m_spIMyClassObj.CreateInstance(__uuidof(MyLib::IMyClass));
即可。 m_spIMyClassObj
将被重新分配以指向新实例,旧实例上的引用计数将减少一个。如果原始对象上没有未完成的引用,它将自行销毁。
答案 1 :(得分:0)
只需调用Release,然后再次使用CreateInstance。