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