Wenn der Speicher, den Sie zuweisen, eine Klasse mit einem Konstruktor ist, der etwas Nützliches tut, ruft der Operator new diesen Konstruktor auf und lässt Ihr Objekt initialisiert.
Wenn Sie jedoch einen POD oder etwas zuweisen, das keinen Konstruktor hat, der den Status des Objekts initialisiert, können Sie keinen Speicher zuweisen und diesen Speicher mit dem in einer Operation neuen Operator initialisieren. Sie haben jedoch mehrere Möglichkeiten:
1) Verwenden Sie stattdessen eine Stapelvariable. Sie können in einem Schritt wie folgt zuweisen und standardmäßig initialisieren :
int vals[100] = {0}; // first element is a matter of style
2) verwenden memset()
. Beachten Sie, dass wenn das Objekt, das Sie zuweisen, kein POD ist , es eine schlechte Idee ist, es zu speichern. Ein spezielles Beispiel ist, wenn Sie eine Klasse mit virtuellen Funktionen memseten, die vtable wegblasen und Ihr Objekt in einem unbrauchbaren Zustand belassen.
3) Viele Betriebssysteme haben Aufrufe, die das tun, was Sie wollen - auf einem Heap zuweisen und die Daten für etwas initialisieren. Ein Windows-Beispiel wäreVirtualAlloc()
4) Dies ist normalerweise die beste Option. Vermeiden Sie es, den Speicher selbst zu verwalten. Sie können STL-Container verwenden, um fast alles zu tun, was Sie mit Rohspeicher tun würden, einschließlich der Zuweisung und Initialisierung auf einen Schlag:
std::vector<int> myInts(100, 0); // creates a vector of 100 ints, all set to zero