new

Aus Appmethod Topics
Wechseln zu: Navigation, Suche

Nach oben zu Schlüsselwörter alphabetisch - Index


Kategorie

Operatoren, C++-spezifische Schlüsselwörter

Syntax

 void *operator new(std::size_t size) throw(std::bad_alloc); void *operator new(std::size_t size, const std::nothrow_t &) throw(); void *operator new[](std::size_t size) throw(std::bad_alloc); void *operator new[](std::size_t size, const std::nothrow_t &) throw(); void *operator new(std::size_t size, void *ptr) throw();    // Platzierungsform void *operator new[](std::size_t size, void *ptr) throw();  // Platzierungsform

Beschreibung

Die new-Operatoren ermöglichen eine dynamische Speicherreservierung, ähnlich der Standardbibliotheksfunktion malloc. Diese Zuweisungsfunktionen versuchen, size Speicher-Bytes zuzuweisen. Bei Erfolg gibt new einen Zeiger auf den zugewiesenen Speicher zurück. Bei Misserfolg ruft der new-Operator die Funktion new_handler auf. Das Standardverhalten von new_handler ist, eine Exception des Typs bad_alloc auszulösen. Wenn keine Exception ausgelöst werden soll, verwenden Sie die nothrow-Version von operator new. Die nothrow-Versionen geben bei Fehlern als Ergebnis NULL zurück und lösen keine Exception aus.

Die Standard-Platzierungsformen von operator new sind reserviert und können nicht neudefiniert werden. Sie können die Platzierungsformen aber mit einer anderen Signatur überladen (z.B. mit einer anderen Anzahl oder einem anderen Typ von Argumenten). Die Standard-Platzierungsformen akzeptieren Zeiger vom Typ void und führen außer der unveränderten Rückgabe dieses Zeigers keine Aktionen aus. Damit können Sie ein Objekt an einer bekannten Adresse zuweisen. Bei der Platzierungsform von new müssen Sie daran denken, den Destruktor für das Objekt explizit aufzurufen und dann den zugewiesenen Speicherpuffer freizugeben. Rufen Sie für ein Objekt, das mit der Platzierungsform des new-Operators zugewiesen wurde, nicht den delete-Operator auf.

Eine Speicheranforderung für ein Objekt, das kein Array ist, führt zum Aufruf der entsprechenden Operatorfunktion new(). Jede Speicheranforderung für ein Array führt zum Aufruf der entsprechenden Operatorfunktion new[](). Denken Sie daran, bei der Freigabe eines mit operator new[]() erzeugten Arrays die Array-Form von operator delete[]() zu verwenden.

Hinweis: Arrays von Klassen erfordern, dass der Standardkonstruktor in der Klasse definiert ist. Auf eine Anforderung nach Reservierung von null Bytes wird ein Zeiger ungleich NULL zurückgegeben. Wiederholte Anforderungen nach null Bytes ergeben jeweils unterschiedliche Zeiger ungleich NULL.

Beispiel für den Operator new mit nothrow

 #include <new> int main(int argc, char* argv[]) { int *pn; // die nothrow-Version gibt einen Null-Zeiger zurück // und löst keine bad_alloc-Exception aus pn = new(nothrow) int[5000000]; if(pn != NULL) { // Zuweisung erfolgreich. } return 0; }


Siehe auch