Я только учусь Directx.Обычно создается устройство Directx и несколько других COM-интерфейсов через вызовы функций, такие как
ID3D11CreateDeviceAndSwapChain(.... ,& device, ...);
. Во всем коде учебника, который я видел, com-интерфейсы выпускаются с использованием чего-то, похожего на
if (pointer_to_com_object) {
pointer_to_com_object->Release();
pointer_to_com_object = 0;
}
например, следующее взято из Tutorial07_2008 в руководствах по Microsoft DirectX 11.
if( g_pSamplerLinear ) g_pSamplerLinear->Release();
if( g_pTextureRV ) g_pTextureRV->Release();
if( g_pCBNeverChanges ) g_pCBNeverChanges->Release();
if( g_pCBChangeOnResize ) g_pCBChangeOnResize->Release();
if( g_pCBChangesEveryFrame ) g_pCBChangesEveryFrame->Release();
if( g_pVertexBuffer ) g_pVertexBuffer->Release();
if( g_pIndexBuffer ) g_pIndexBuffer->Release();
if( g_pVertexLayout ) g_pVertexLayout->Release();
if( g_pVertexShader ) g_pVertexShader->Release();
if( g_pPixelShader ) g_pPixelShader->Release();
if( g_pDepthStencil ) g_pDepthStencil->Release();
if( g_pDepthStencilView ) g_pDepthStencilView->Release();
if( g_pRenderTargetView ) g_pRenderTargetView->Release();
if( g_pSwapChain ) g_pSwapChain->Release();
if( g_pImmediateContext ) g_pImmediateContext->Release();
if( g_pd3dDevice ) g_pd3dDevice->Release();
Как указано в ответах на этот вопрос COM-объекты могут иметь ссылки на них, которые вы не указали 't own.
Так вышеприведенный плохой способ очистить DirectX или у COM-объектов Directx никогда не будет ссылок на них, которые вы не создали?
Я просто спрашиваю, потому что я все время вижу этосделал так, как я учусь.