Heim >Backend-Entwicklung >C++ >Wann muss Placement-New mit „reinterpret_cast' verwendet werden, um trivial standardmäßig konstruierbare Objekte zu erstellen?

Wann muss Placement-New mit „reinterpret_cast' verwendet werden, um trivial standardmäßig konstruierbare Objekte zu erstellen?

Susan Sarandon
Susan SarandonOriginal
2024-12-06 16:14:23376Durchsuche

When Must Placement-New Be Used with `reinterpret_cast` to Create Trivially Default-Constructible Objects?

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>(buffer)->x = 42;) zu undefiniertem Verhalten.

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn