手动释放ComPtr

时间:2012-11-16 14:05:15

标签: c++ com

我正在使用ComPtr(Microsoft :: WRL)来管理一些DirectX11资源。 我该如何手动释放它?

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

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

2 个答案:

答案 0 :(得分:17)

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

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

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

答案 1 :(得分:4)

您可以指定空指针。