【发布时间】:2012-10-28 00:22:05
【问题描述】:
我一直在阅读与新的 c++ 标准智能指针 unique_ptr、shared_ptr 和 weak_ptr 相关的各种使用建议,并且通常“了解”它们是关于什么的'正在编写我自己的代码来声明和使用它们。
但是,我读过的所有讨论似乎都仅限于这种简单的使用情况,即程序员在他/她自己的代码中使用智能,而没有真正讨论必须使用需要原始指针或其他指针的库时的技术诸如 COM 接口指针之类的“智能指针”类型。
具体来说,我正在通过 C++ 学习我的方式,方法是尝试启动并运行标准 Win32 实时游戏循环,该循环使用 Direct2D 和 DirectWrite 将文本呈现到显示每秒帧数的显示器上。
我使用 Direct2D 的第一个任务是使用 MSDN 上的 Direct2D 示例中的以下代码创建一个 Direct2D 工厂对象:
ID2D1Factory* pD2DFactory = nullptr;
HRESULT hr = D2D1CreateFactory(D2D1_FACTORY_TYPE_SINGLE_THREADED, &pD2DFactory);
pD2DFactory 显然是一个“输出”参数,在这里我不确定如何在这种情况下使用智能指针,如果确实可能的话。我没有经验的 C++ 头脑告诉我我有两个问题:
- pD2DFactory 是 COM 接口指针类型, smart_ptr 如何与 COM 对象实例的 Add() / Release() 成员函数一起使用?
- 在函数使用“out”指针参数技术的情况下,是否可以将智能指针传递给函数?
我确实尝试了在 comip.h 头文件中使用 _com_ptr_t 来帮助管理指针生命周期的替代方法,并声明了 pD2DFactory带有以下代码的指针:
_com_ptr_t<_com_IIID<pD2DFactory, &__uuidof(pD2DFactory)>> pD2DFactory = nullptr;
到目前为止它似乎可以工作,但是正如您所见,语法很麻烦:)
所以,我想知道这里是否有任何 C++ 专家可以确认智能指针是否能够在这种情况下提供帮助并提供使用示例,或者在需要使用智能指针时向我指出更深入的讨论其他对它们一无所知的代码库。或者这仅仅是我试图使用错误的工具来完成工作的一个案例? :)
【问题讨论】:
-
这可能属于 Stack Overflow,因为它完全是一个编程问题,在游戏开发中没有人能更好地回答。
-
"但是,如你所见,语法很麻烦" 这就是 typedefs 的用途。
标签: c++