【问题标题】:How to Get the Address of the Pointer in a com_ptr_t如何在 com_ptr_t 中获取指针的地址
【发布时间】:2014-01-08 19:52:47
【问题描述】:

我需要将我的 ID3D11RenderTargetView 指针的地址传递给一个函数,并且我使用一个 com_ptr_t 来保存它。所以首先我尝试了:

ID3D11RenderTargetViewPtr pRenderTargetView; = ID3D11RenderTargetViewPtr(NULL);
pImmediateContext->OMSetRenderTargets(1, &pRenderTargetView, nullptr);

但是,& 运算符会将指针变为空。然后我再次查看了 com_ptr_t 函数,发现我可以写:

pImmediateContext->OMSetRenderTargets(1, &pRenderTargetView.GetInterfacePtr(), nullptr);

它确实有效,但是没有更简单的方法来获取底层指针的地址而不会丢失它吗?通过更简单,我的意思是更短,语法明智。

【问题讨论】:

  • 不,只有这两种方式。 _com_ptr_t 是一个非常简单的类,你可以在 comip.h 看到它的定义

标签: c++ com null direct3d smart-pointers


【解决方案1】:

伊戈尔的评论是正确的。 _com_ptr_t 的目的非常简单,简单地转换为原始接口指针几乎总是错误的做法。

例如,& 操作符释放接口的主要原因是人们获取智能指针地址的第一个原因是将其作为输出参数传递给某些工厂函数。如果& 没有释放指针,那么旧值就会泄漏。

这发生了很多

现在,还有更罕见的情况,例如您所拥有的情况,您将接口的地址传递给不会设置它的函数,在这些情况下,您拥有 GetInterfacePtr 函数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-01-21
    • 1970-01-01
    • 2014-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多