0

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

谢谢

4

2 回答 2

5

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

于 2012-05-04T15:14:09.273 回答
0

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

于 2012-05-04T14:52:26.470 回答