我需要将ID3D11RenderTargetView指针的地址传递给函数,并使用com_ptr_t来保存它。所以首先我尝试了:
ID3D11RenderTargetViewPtr pRenderTargetView; = ID3D11RenderTargetViewPtr(NULL);
pImmediateContext->OMSetRenderTargets(1, &pRenderTargetView, nullptr);
然而,& operator将指针变为null。然后我再次查看了com_ptr_t函数,发现我可以写:
pImmediateContext->OMSetRenderTargets(1, &pRenderTargetView.GetInterfacePtr(), nullptr);
它确实有效,但是没有更简单的方法来获取底层指针的地址而不会丢失它?更简单,我的意思是更短,语法明智。
答案 0 :(得分:3)
_com_ptr_t
的目的非常简单,对原始接口指针的简单转换几乎总是错误的。
例如,&
运算符释放接口的主要原因是人们获取智能指针地址的首要原因是将其作为out参数传递给某个工厂函数。如果&
没有释放指针,则旧值将泄漏。
发生了很多。
现在,有一些非常罕见的情况,例如您所拥有的情况,您将接口的地址传递给不会设置它的函数,在这种情况下,您具有GetInterfacePtr函数