2013-05-16 8 views
5

Nach ++ 03 Standard C, 5.3.4/10Was ist die Absicht hinter der C++ - Standardanforderung, dass new char [] ausgerichteten Speicher liefert?

Für Arrays von char und unsigned char, die Differenz zwischen dem Ergebnis der neuen Expression und der durch die Zuordnungsfunktion zurück Adresse soll eine sein ganzzahliges Vielfaches der strengsten Ausrichtungsanforderung (3.9) eines beliebigen Objekttyps, dessen Größe nicht größer als die Größe des zu erstellenden Arrays ist.

Die Zuweisungsfunktion (operator new[]()) wird auch benötigt, um Speicher für jeden möglichen Typ zu reservieren. So sagt der zitierte Teil effektiv, dass new char[sizeof(T)] Speicher richtig ausgerichtet für Typ T ergeben sollte.

Was ist der Zweck dieser Anforderung? Ich könnte einfach operator new() (oder operator new[]()) anrufen, die garantiert ordnungsgemäß ausgerichteten Speicher zurückgeben und den property ausgerichteten Speicher haben. Ich meine sowieso new char[] werde operator new()[] anrufen, also könnte ich es einfach selbst nennen.

Was ist der Zweck der zitierten Anforderung? Warum nicht einfach operator new[]() anrufen?

Antwort

3

Ich rufe im Allgemeinen nur operator new direkt, aber die Autoren des Standards beschlossen, auch die Verwendung von new char[] als Mittel zur Beschaffung von Raw-Speicher zu ermöglichen. Also die Ausrichtung Anforderung.

+0

Haben frühe Versionen von C++ diese anderen Möglichkeiten der Zuweisung von unformatiertem Speicher erlaubt? Dies könnte für die Abwärtskompatibilität sein. – Barmar

+0

@Barmar Soweit ich weiß, ja. Zumindest funktionierte 'new char []' mit allen frühen Compilern (CFront, Zortech und g ++); ob es garantiert war oder nicht, ich weiß es nicht. –

+0

Das ist, was ich sage - 'new char []' hat immer funktioniert, aber die anderen Möglichkeiten der Zuweisung von rohen Speicher nicht haben, so ist dies die Art, wie die Leute es ursprünglich getan haben. – Barmar

Verwandte Themen