CComPtr replacement for gcc?

CComPtr replacement for gcc?

本文关键字:gcc for replacement CComPtr      更新时间:2023-10-16

我正在做一些COM编程,我的编译器是gcc。这意味着CComPtr对我不可用。如何使用 Boost 轻松实现替换?我需要的语义是:

  • 复制时调用AddRef

  • 销毁时呼叫Release

  • 额外:能够判断它指向的对象是否仍然有效(不确定这是否可能)

我认为可以将shared_ptr与自定义删除器一起使用,但我对这些功能不是很熟悉(我也不知道如何让它调用AddRefRelease)。我知道我可以手工制作这个类,但我很确定这个功能在 Boost 中以通用形式提供。

查看 HILO 项目,它推出了自己的 CComPtr 实现。

我不确定所需函数AddRefRelease的语义是什么,但是:

您可以使用boost::intrusive_ptr并具有两个自由函数intrusive_ptr_add_refintrusive_ptr_release,将调用它们来增加/减少引用计数器。然后,这些函数可能会调用对象上的这些AddRefRelease函数。当计数器达到0时,您必须自己处理删除。