2

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

  • AddRef复制时调用

  • Release破坏时调用

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

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

4

2 回答 2

3

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

于 2012-06-26T13:18:40.147 回答
2

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

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

于 2012-06-26T14:48:02.003 回答