【问题标题】:COM smart pointer how to reset to a new instance?COM 智能指针如何重置为新实例?
【发布时间】:2012-05-04 14:41:19
【问题描述】:

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

谢谢

【问题讨论】:

    标签: c++ com reset smart-pointers


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-05-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-03
      • 2011-04-06
      相关资源
      最近更新 更多