我只是在學習directx。一個通常創建通過功能一個DirectX設備和其他幾個COM接口調用諸如清理directx,正確釋放com引用
ID3D11CreateDeviceAndSwapChain(.... ,& device, ...);
在所有教程代碼我所看到的,COM接口使用一個類似於釋放到
if (pointer_to_com_object) {
pointer_to_com_object->Release();
pointer_to_com_object = 0;
}
例如以下內容摘自Microsoft的directx 11教程中的Tutorial07_2008。
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();
正如answers to this question COM對象指出,可以有你不擁有對它們的引用。
原來是上面一個糟糕的方式來清理DirectX或做的DirectX COM對象永遠沒有你沒有建立對它們的引用?
我只是問,因爲我總是看到作爲我學習它做這種方式。
由於其他對象擁有引用,你需要至少需要一點關懷,以確保你釋放他們所有。我喜歡確保它們不受任何限制,然後按照創建的相反順序進行發佈。 – ssube 2011-06-09 20:56:48