COM智能指针如何重置为新实例?

时间:2012-05-04 14:41:20

标签: c++ com reset smart-pointers

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)。

由于

2 个答案:

答案 0 :(得分:5)

只需再次致电m_spIMyClassObj.CreateInstance(__uuidof(MyLib::IMyClass));即可。 m_spIMyClassObj将被重新分配以指向新实例,旧实例上的引用计数将减少一个。如果原始对象上没有未完成的引用,它将自行销毁。

答案 1 :(得分:0)

只需调用Release,然后再次使用CreateInstance。