如何获取com_ptr_t中指针的地址
How to Get the Address of the Pointer in a com_ptr_t
我需要将ID3D11RenderTargetView指针的地址传递给一个函数,并使用com_ptr_t来保存它。所以首先我尝试:
ID3D11RenderTargetViewPtr pRenderTargetView; = ID3D11RenderTargetViewPtr(NULL);
pImmediateContext->OMSetRenderTargets(1, &pRenderTargetView, nullptr);
但是,& 运算符将指针转换为 null。然后我再次浏览了com_ptr_t函数,发现我可以写:
pImmediateContext->OMSetRenderTargets(1, &pRenderTargetView.GetInterfacePtr(), nullptr);
它确实有效,但是没有更简单的方法可以在不丢失基础指针的情况下获取它吗?更简单,我的意思是更短,语法明智。
伊戈尔的评论是正确的。 _com_ptr_t
的目的非常简单,对原始接口指针的简单转换几乎总是错误的做法。
例如,&
运算符释放接口的主要原因是,人们获取智能指针地址的首要原因是将其作为out参数传递给某个工厂函数。 如果&
没有释放指针,则旧值将泄漏。
这种情况发生了很多。
现在,有更罕见的情况,例如您拥有的那种,您将接口的地址传递给不会设置它的函数,在这些情况下,您拥有 GetInterfacePtr 函数。
相关文章:
- 1d 智能指针不适用于语法 (*)++
- 在C#中处理C++指针而不使用unsafe的最佳方法
- 为什么使用 "this" 指针调用派生成员函数?
- 函数向量_指针有不同的原型,我可以构建一个吗
- 使用指针从C++中的数组中获取最大值
- 助记符和指向成员语法的指针
- 嵌入方指针压缩已禁用
- 数组的指针从不分段故障
- C++ 指针的内存地址和指向数组的内存地址如何相同?
- 何时在引用或唯一指针上使用移动语义
- QMetaObject invokeMethod的基于函数指针的语法
- 如何从 std::atomic 中提取指针 T<T>?
- 如何在 C# 中映射双 C 结构指针?
- C++将浮点指针值舍入为小数位数
- C++中的指针否定 (!ptr == NULL)
- 使用 void 指针:void **ptr.. 如何修改共享内存的值?
- C++ 如何从指向结构的指针将 PTR 返回到 int
- 正确使用std智能指针以确保ptr安全
- 一个唯一的ptr类如何将它的实例指针传递给它的成员对象
- openv Ptr类.指针对象在调用函数后被删除