是的,它实际上是“或”。我会解释的。我正在为自己开发帮助类,比如 DirectXToolKit。为了管理 COM,我正在使用Microsoft::WRL::ComPtr< T > (wrl.h)。
struct Renderer
{
ComPtr<ID3D11Device> m_Device;
ComPtr<ID3D11DeviceContext> m_ImmContext;
}
当所有资源都被销毁时,上面结构的实例也应该被销毁,但是在调用 dtor 之后,我在Microsoft::WRL::ComPtr< T >尝试释放设备时触发了错误或上下文。
我已经实现了手动释放 m_Device 和 m_ImmContext 的 dtor,但不幸的是,我尝试释放的最后一个成员总是在函数中遇到问题
unsigned long InternalRelease() throw()
{
unsigned long ref = 0;
T* temp = ptr_;
if (temp != nullptr)
{
ptr_ = nullptr;
ref = temp->Release();
}
return ref;
}
这里
ref = temp->Release();
当我首先成功释放设备时,上下文会触发错误,反之亦然(!是的,当其中一个成功释放时,第二个成员的销毁失败)。已经有像我这样的问题(销毁 directx 设备和交换链),但是窗口和交换链已经被销毁,就像其他 dx 资源一样。不知道为什么会这样。有任何想法吗?
对不起我不完美的英语:3