我一直在阅读有关新的C ++标准智能指针unique_ptr,shared_ptr和weak_ptr的各种使用建议,并且当我编写声明和使用它们的代码时,通常会理解它们的含义。然而,我阅读过的所有讨论似乎都局限于这种简单的使用情况,即程序员在自己的代码中使用智能指针,没有真正探讨在与期望原始指针或其他类型的“智能指针”(如COM接口指针)的库一起工作时的技术。
具体而言,我正在通过尝试运行使用Direct2D和DirectWrite渲染文本以显示每秒帧数到显示器的标准Win32实时游戏循环来学习C ++。
我的第一个任务是使用MSDN上Direct2D示例中的以下代码创建Direct2D Factory对象:
具体而言,我正在通过尝试运行使用Direct2D和DirectWrite渲染文本以显示每秒帧数到显示器的标准Win32实时游戏循环来学习C ++。
我的第一个任务是使用MSDN上Direct2D示例中的以下代码创建Direct2D Factory对象:
ID2D1Factory* pD2DFactory = nullptr;
HRESULT hr = D2D1CreateFactory(D2D1_FACTORY_TYPE_SINGLE_THREADED, &pD2DFactory);
pD2DFactory 显然是一个“out”参数,而我在这里变得不确定如何在这种情况下利用智能指针,如果可能的话。我的缺乏经验的C++思维告诉我有两个问题:
- 由于 pD2DFactory 是一个COM接口指针类型,智能指针如何与COM对象实例的Add() / Release()成员函数一起工作?
- 在函数使用“out”指针参数技术的情况下,智能指针能否传递给函数?
我尝试了使用comip.h头文件中的_com_ptr_t来帮助管理指针生命周期,并使用以下代码声明了pD2DFactory指针:
_com_ptr_t<_com_IIID<pD2DFactory, &__uuidof(pD2DFactory)>> pD2DFactory = nullptr;
目前看来它似乎在工作,但是你可以看到,语法很繁琐 :)
所以,我想知道是否有C++大师能够确认智能指针是否能够在这种情况下帮助,并提供使用示例,或者将我指向更深入的智能指针用法讨论,尤其是当需要与不知道智能指针的其他代码库一起使用时。还是说我只是在尝试使用错误的工具? :)