Der Operator new (C++)

Aus RAD Studio
Wechseln zu: Navigation, Suche

Nach oben zu Die Operatoren New und Delete - Index


Standardmäßig gibt es keine überladene Version von new, jede Anforderung nach dynamischer Speicherreservierung läuft über die globale Version von new, also über ::operator new(). Eine Anforderung zur Reservierung eines Array ruft ::operator new[]() auf. Für Objekte einer Klasse vom Typ name kann ein spezieller Operator definiert werden, der mit name::operator new() oder name::operator new[]() aufgerufen wird. Bei der Anwendung von new auf Objekte der Klasse name wird der entsprechende Operator, also name::operator new aufgerufen, falls er existiert; andernfalls wird der globale Operator ::operator new verwendet.

Nur die Funktion operator new() kennt einen optionalen Initialisierer. Die Version zur Speicherreservierung für Arrays, operator new[](), akzeptiert keinen Initialisierer. Wenn keine Initialisierer explizit angegeben sind, so enthalten die durch new erzeugten Objekte unvorhersagbare Zufallswerte. Durch new erzeugte Objekte können aber, falls es keine Arrays sind, mit einem passenden, in runden Klammern stehenden Ausdruck initialisiert werden:

   int_ptr = new int(3);

Arrays in Klassen mit Konstruktoren werden vom Standardkonstruktor initialisiert. Der anwenderdefinierte Operator new mit anwenderdefinierter Initialisierung spielt bei C++-Konstruktoren für Klassenobjekte eine sehr wichtige Rolle.

Siehe auch