Heim >Backend-Entwicklung >C++ >Wann muss Placement-New mit „reinterpret_cast' verwendet werden, um trivial standardmäßig konstruierbare Objekte zu erstellen?
Reinterpret_cast und die Erstellung trivial standardmäßig konstruierbarer Objekte
cppreference wurde verwendet, um zu behaupten, dass reinterpret_cast verwendet werden könnte, um trivial standardmäßig konstruierbare Objekte zu erstellen auf entsprechend ausgerichteter Lagerung. Allerdings wurde diese Behauptung inzwischen dahingehend korrigiert, dass in solchen Fällen ein Platzierungsneu erforderlich ist, um ein Objekt offiziell einzuführen und undefiniertes Verhalten zu vermeiden.
Wann beginnt die Lebensdauer eines Objekts?
Angesichts dieser Korrektur ist klar, dass im bereitgestellten Code kein X-Objekt vorhanden ist. Daher führt jeder Versuch, auf seine Mitglieder zuzugreifen (z. B. reinterpret_cast
Die Rolle von alignas()
Der Spezifizierer alignas() stellt sicher, dass der Speicher entsprechend ausgerichtet ist, um ein X aufzunehmen. Es wird kein X-Objekt erstellt.Wenn es einen Zweig zwischen der alignas()-Deklaration und dem reinterpret_cast gäbe, würde dies nichts an der Tatsache ändern, dass kein Änderungen in den C-Standards
Die Interpretation dieses Verhaltens ist zwischen C 11 und konsistent
geblieben C 1z. Das Konzept der Erstellung von Objekten ohne explizite Konstruktion durch reinterpret_cast wird in keinem der beiden Standards unterstützt.Das obige ist der detaillierte Inhalt vonWann muss Placement-New mit „reinterpret_cast' verwendet werden, um trivial standardmäßig konstruierbare Objekte zu erstellen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!