Initialisiererliste
-
Achso, der wird dann also automatisch aufgerufen.
Eine letzte Frage noch. Warum verwendet man bei structs ZeroMemory?
Z.B. hier:WNDCLASSEX wcex; ZeroMemory(&wcex, sizeof(WNDCLASSEX));Haben Strukturen keine Initialisierungsliste?
-
bzw. wird hier nicht der Default-Constructor aufgerufen?
-
Das ist C-Code. Vergiss das ganz schnell.
-
Initliste schrieb:
Achso, der wird dann also automatisch aufgerufen.
Eine letzte Frage noch. Warum verwendet man bei structs ZeroMemory?
Z.B. hier:WNDCLASSEX wcex; ZeroMemory(&wcex, sizeof(WNDCLASSEX));Haben Strukturen keine Initialisierungsliste?
Structs haben keinen Konstruktor, den man aufrufen könnte. Und selbst unter C würde ich lieber die direkte Methode
WNDCLASSEX wcex = {0};verwenden.
-
Initliste schrieb:
Warum verwendet man bei structs ZeroMemory?
Wo auch immer Du das her hast; Du schließt aus einem speziellen Fall auf allgemeines.
'Man' verwendet nicht ZeroMemory() bei structs.
Jemand hat's in Deinem zitierten Fall getan.
Himmelweiter Unterschied!
-
CStoll schrieb:
Structs haben keinen Konstruktor, den man aufrufen könnte.
Structs können in C++ einen Konstruktor haben, in C natürlich nicht

CStoll schrieb:
Und selbst unter C würde ich lieber die direkte Methode
WNDCLASSEX wcex = {0};verwenden.
-
Meinst du nur das ZeroMemory? Die WNDCLASSEX brauche ich um mir ein Win32-Fenster zu erzeugen?
-
Geht der folgende Code so in Ordnung?
ATOM MyRegisterClassEx() { WNDCLASSEX wcex; wcex.cbSize = sizeof(WNDCLASSEX); wcex.style = CS_HREDRAW | CS_VREDRAW | CS_OWNDC; wcex.lpfnWndProc = static_cast<WNDPROC>(WndProc); wcex.cbClsExtra = 0; wcex.cbWndExtra = sizeof(LONG_PTR); wcex.hInstance = hInstance; wcex.hIcon = hIcon; wcex.hCursor = LoadCursor(NULL, IDC_ARROW); wcex.hbrBackground = NULL; wcex.lpszMenuName = NULL; wcex.lpszClassName = L"MyClass"; wcex.hIconSm = NULL; return RegisterClassEx(&wcex); }
-
Also ich wäre ja für eine WNDCLASSEX Factory mit Style Policies ala Alexandrescu

-
CStoll schrieb:
Structs haben keinen Konstruktor, den man aufrufen könnte.
structs sind Klassen. Alle Klassen verfügen über einer Kopierkonstruktor und, falls kein Konstruktor explizit deklariert wurde, auch über einen Defaultkonstruktor.
In C++0x sind die Regeln etwas komplizierter.
-
Bjarne Stroustrup schreibt in seinem Buch Die C++ Programmiersprache wie folgt
struct s { /* .... */ } // ist ein Synonym für class s { public: /* ... */}@Initliste
Es macht auf jeden Fall Sinn, eine Struktur wie
WNDCLASSEX, vorher mit={0}oderZeroMemory bzw. memsetabzunullen.
Nach einemWNDCLASSEX wcex;steht nämlich zunächst Schrott in der Struktur drin. Vergisst man beim Initialisieren ein Member ->
