如何获取com_ptr_t中指针的地址

How to Get the Address of the Pointer in a com_ptr_t

本文关键字:ptr 指针 地址 com 何获取 获取      更新时间:2023-10-16

我需要将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 函数。