C++/WinRT提供了用于COM对象的3种智能指针-- Microsoft::WRL::ComPtr
、com_ptr
和基于ATL的CComPtr
。
在我的例子中,它是一个COM对象,这意味着它不是一个in-proc或out-proc COM对象,它是作为一个C++对象创建的。
在这种情况下,我应该在C++/WinRT组件中使用哪个智能指针?
发布于 2020-09-02 19:18:25
无论使用“真正的COM”还是"COM lite“(a.k.a )。),您可以使用IUnknown
方法AddRef和Release以相同的方式跟踪生命周期。各种COM智能指针都依赖于IUnknown
方法,因此您可以任意选择。
对于C++/WinRT应用程序,建议使用winrt::com_ptr
。有关更多信息,请参见Microsoft上的使用C++/WinRT使用COM组件。
我个人更喜欢在我的所有代码中使用Microsoft::WRL::ComPtr,因为我的项目通常支持使用C++/CX的UWP,使用C++/WinRT的UWP,通过C++/CX使用XDK的Xbox,通过C++/WinRT使用XDK的Xbox,使用GDK的Xbox以及使用Win32桌面平台的Xbox。
#include <wrl/client.h>
来获取这个类,如果您完全不使用Windows,您还可以定义__WRL_NO_DEFAULT_LIB__
和__WRL_CLASSIC_COM_STRICT__
预处理器定义。CComPtr
更好的选择。WRL本质上是“ATL2.0”,因此已经修复了一些微妙的使用问题。看这个MSDN杂志文章。请参阅Microsoft
https://stackoverflow.com/questions/63699529
复制相似问题