Ich habe Schwierigkeiten, den folgenden Absatz zu verstehen, der aus der Referenz über den trivialen Standardkonstruktor zitiert wird . Ich habe nach Stackoverflow gesucht, aber immer noch keine klare Antwort erhalten. Also bitte helfen.
Ein trivialer Standardkonstruktor ist ein Konstruktor, der keine Aktion ausführt. Alle mit der C-Sprache kompatiblen Datentypen (POD-Typen) sind trivial standardmäßig konstruierbar. Im Gegensatz zu C können Objekte mit trivialen Standardkonstruktoren jedoch nicht durch einfaches Neuinterpretieren eines entsprechend ausgerichteten Speichers erstellt werden, z. B. der mit std :: malloc zugewiesene Speicher. Placement-new ist erforderlich, um ein neues Objekt formal einzuführen und potenzielles undefiniertes Verhalten zu vermeiden.
Wenn der triviale Standardkonstruktor nichts tut, warum können wir dann den Speicher nicht neu interpretieren und so tun, als gäbe es ein Objekt mit dem angegebenen Typ? Könnten Sie bitte einige Beispiele für das mögliche undefinierte Verhalten nennen , das dies verursachen würde?
*reinterpret_cast<float*>(&someNonFloatObject) = 0.1f;
. C ++ hat ein Konzept von Objekten und Objektlebensdauern, das auf dem abstrakten Computer angegeben ist. Nur weil es keine CPU-Anweisung zum Erstellen eines Objekts aus dem Speicher gibt, bedeutet dies nicht, dass es auf dem abstrakten Computer keinen Unterschied gibt.