[ dontoo @ 08.03.2010. 10:23 ] @
Ako sam ja definirao destruktor u klasi koji uništava neke COM objekte, dali ja trebam eksplicitno i pozvati destruktor ili će se on sam pozvati kad program završi?
Dali je ovakav kod dolje u redu što se tiče destruktora, to jest program će sam pozvati destruktor kad završi sa klasom?
Code:

class D3D
{
public:
    ~D3D();
    int Run();
    HRESULT InitMainWindow( HINSTANCE, int );
    HRESULT InitDevice();
    void OnResize();
    void Render();
    void UpdateScene();
};
//////////////////////////////////////////////////////////////
D3D::~D3D()
{
    if( g_pd3dDevice ) g_pd3dDevice->ClearState();
    if( g_pRenderTargetView ) g_pRenderTargetView->Release();
    if( g_pSwapChain ) g_pSwapChain->Release();
    if( g_pd3dDevice ) g_pd3dDevice->Release();
}
[ deerbeer @ 08.03.2010. 10:35 ] @
Ako si instancirao klasu D3D sa :
Code:
 
D3D *p = new D3D(); 

Moras negde u kodu imati
Code:
 
delete p ; 

koji ce automatski pozvati destruktor .
A ako instanciras
Code:
 
D3D p ;  

automatski se poziva destruktor cim p promenjljiva izadje iz opsega (bilo koja funckija , ili glavna main f-ija) .

[ X Files @ 08.03.2010. 11:26 ] @
^
Kao dodatak ovome gore, napomena da često treba obratiti pažnju i na redosled čišćenja/oslobađanja resursa u destruktoru, jer neretko postoji međuzavisnost. Obrunt redosled od kreiranje je najčešće pravi recept. Verujem da je ovde u konkretnom primeru Ok.