我正在做一些COM编程,我的编译器是gcc。这意味着CComPtr对我不可用。如何使用 Boost 轻松实现替换?我需要的语义是:
-
复制时调用
AddRef
-
销毁时呼叫
Release
-
额外:能够判断它指向的对象是否仍然有效(不确定这是否可能)
我认为可以将shared_ptr
与自定义删除器一起使用,但我对这些功能不是很熟悉(我也不知道如何让它调用AddRef
和Release
)。我知道我可以手工制作这个类,但我很确定这个功能在 Boost 中以通用形式提供。
查看 HILO 项目,它推出了自己的 CComPtr 实现。
我不确定所需函数AddRef
和Release
的语义是什么,但是:
您可以使用boost::intrusive_ptr
并具有两个自由函数intrusive_ptr_add_ref
和intrusive_ptr_release
,将调用它们来增加/减少引用计数器。然后,这些函数可能会调用对象上的这些AddRef
和Release
函数。当计数器达到0
时,您必须自己处理删除。