Soll ich im Konstruktor meiner Engine bei jeder Klasse eigentlich ein ZeroMemory(this,sizeof(ENGINE_CLA....)); einbauen oder nicht?
Auf keinen Fall, das ist generell einfach nur falsch, funktioniert nur in ganz speziellen Ausnahmefällen. Spätestens bei einer Klasse die virtuelle Methoden hat, wird das ganz bös' in die Hose gehen. (Believe me, I learned the hard way
. Der Grund dafür ist, dass eine solche Klasse verstecke Membervariablen enthält, Stichwort Virtual Function Table wenns interessiert. Und rein prinzipiell ist das genaue Layout eines Objektes im Speicher im Allgemeinen nicht definiert.)
Und warum macht man bei einem D3DPRESENT_PARAMETERS d3dpp immer ZeromMemory??
D3DPRESENT_PARAMETERS ist ein sog. PoD (Plain old Datatype, prinzipiell eine Klasse die nur primitive Datentypen als Member und nur einen trivialen Copy-Constructor, Assignment-Operator und Destruktor hat), also genau ein solcher Ausnahmefall. Ich initialisiere solche Strukturen wie D3DPRESENT_PARAMETERS allerdings nie mit ZeroMemory() sondern immer alle Member explizit, auch wenn es nur ein = 0 ist. Dann ist immer sofort klar was welche Werte bekommt und man kann nie was übersehen. Außerdem: Warum sollte ich zuerst alles mit 0en füllen, wenn ich Teile davon nacher gleich wieder mit was anderem überschreibe!?