Wie neue Werke

Der Zuordnung Ausdruck — Der Ausdruck, der den Operator enthält neu — hat drei Dinge:

  • Sucht und reserviert Speicher, sodass das Objekt oder die Objekte zugeordnet werden können.Wenn diese Phase abgeschlossen ist, wird die richtige Größe des Arbeitsspeichers belegt, ist jedoch noch nicht auf ein Objekt.

  • Initialisiert die Objekte.Sobald die Initialisierung abgeschlossen ist, sind genügend Informationen vorhanden, damit der zugeordnete Speicher ein Objekt entspricht.

  • Gibt einen Zeiger auf Objekte des Zeigertyps zurück, der von NEW-TYPE NAME oder dem Typnamenabgeleitet ist.Das Programm verwendet diesen Zeiger, um das neu zugeordnete Objekt zuzugreifen.

Der neu-Operator ruft die Funktion operator newauf.Für Arrays beliebigen Typs und für Objekte, die nicht von Klasse, structoder - Union-Typen erstellt wurden, wird eine globale Funktion, ::Operator neu, das aufgerufen wird, um Speicher zuzuordnen.Klassentyp Objekte können ihre eigene operator new static-Memberfunktion auf Basis einer einzelnen Klasse definieren.

Wenn der Compiler den neu-Operator, um ein Objekt des Typs typezuzuordnen, es Probleme ein Aufruf type**::Operator new (sizeof (** type))oder, wenn kein benutzerdefiniertes operator new definiert ist, ::Operator new (sizeof ( type)).Daher kann der Operator neu den richtigen Arbeitsspeicher für das Objekt reservieren.

HinweisHinweis

Das Argument für operator new ist vom Typ size_t.Dieser Typ wird in DIRECT.H, in MALLOC.H, in MEMORY.H, in SEARCH.H, in STDDEF.H, in STDIO.H, in STDLIB.H, in STRING.H und TIME.H. definiert.

Eine Grammatik in der WSDL-Spezifikation Platzierung zulässig (siehe die Grammatik für neuer Operator).Platzierungs Der Parameter kann nur für benutzerdefinierte Implementierungen von operator newverwendet werden. Sie können weitere Informationen zu operator newübergeben werden soll.Ein Ausdruck mit einem Platzierungs wie T *TObject = new ( 0x0040 ) T; Feld wird zu T *TObject = T::operator new( sizeof( T ), 0x0040 ); , wenn Klasse T den neuen Member T *TObject = ::operator new( sizeof( T ), 0x0040 );Operator " hat, andernfalls zu übersetzen.

Die ursprüngliche Absicht des Felds Platzierungs war, die an den vom Benutzer angegebenen Adressen zuzuordnenden Objekte abhängigen Hardware.

HinweisHinweis

Obwohl das obige Beispiel nur ein Argument für das Feld Platzierungs anzeigt, gibt es keine Beschränkung, wie viele zusätzlichen Argumenten an operator new auf diese Weise übergeben werden können.

Auch wenn operator new für einen Klassentyp definiert wurde, kann der globale Operator verwendet werden, indem Sie das Formular in diesem Beispiel verwendet:

T *TObject =::new TObject;

Der Bereichsauflösungsoperator (::) erzwingt Verwendung des globalen neu-Operators.

Siehe auch

Referenz

new-Operator (C++)