8

我正在使用 ComPtr (Microsoft::WRL) 来管理一些 DirectX11 资源。我怎样才能手动释放它?

如果我理解正确,“ReleaseAndGetAddressOf”方法只会释放指针而不是资源本身(返回),我不确定“重置”方法。

我能想到的唯一选择是手动调用指针析构函数,或者在从“ReleaseAndGetAddressOf”获取原始指针之后调用“Release”,我想避免这种情况。

4

2 回答 2

20

提供了 WRL 的源代码,请查看 include/winrt/wrl/client.h。嵌入的 COM 指针(ptr_ 成员)由 InternalRelease() 函数释放。使以下任何一种方式释放指针合适的候选人:

  • 析构函数。使用 ComPtr<> 的原因
  • 分配 nullptr
  • 使用 ReleaseAndGetAddressOf(),很长的路要走
  • 调用 Reset()

因此,分配 nullptr 或调用 Reset() 是一个不错的选择,请自行选择。或者如果您只想自己管理接口指针,则根本不使用它,当然不需要使用ComPtr。

于 2012-11-16T14:49:43.653 回答
4

您可以分配一个空指针。

于 2012-11-16T14:27:38.027 回答