【问题标题】:CComPtr replacement for gcc?CComPtr 替换 gcc?
【发布时间】:2012-06-27 19:29:11
【问题描述】:

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

  • 复制时调用AddRef

  • 销毁时调用Release

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

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

【问题讨论】:

    标签: c++ com smart-pointers


    【解决方案1】:

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

    【讨论】:

    • 谢谢,确实如此(尽管有一个奇怪/错误的行为:它增加了其构造函数中的 COM 引用计数,这意味着用户必须在某些时候在原始指针上调用 Release,否则会有泄漏)。我对其进行了修改以满足我的需要。对于任何想知道的人,这里是HILO project 的链接。
    【解决方案2】:

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

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

    【讨论】:

    • 这也是一个正确的答案。我选择了另一个,因为它比 intrusive_ptr 更简单。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-02-01
    • 1970-01-01
    • 2013-07-01
    • 2012-03-03
    • 2018-04-10
    • 2010-09-24
    • 2014-05-13
    相关资源
    最近更新 更多