std::set_new_handler
| Definiert in Header <new>
|
||
std::new_handler set_new_handler( std::new_handler new_p ) throw();
|
(bis C++11) | |
std::new_handler set_new_handler( std::new_handler new_p ) noexcept;
|
(seit C++11) | |
Setzt new_p die neue globale new-handler-Funktion und gibt den zuvor installierten new-handler zurück.
Die new-handler-Funktion ist die Funktion, die von Allokationsfunktionen aufgerufen wird, wenn ein Speicherallokationsversuch fehlschlägt. Ihr vorgesehener Zweck ist einer von drei Dingen:
Die Standardimplementierung wirft std::bad_alloc. Der Benutzer kann seinen eigenen new-handler installieren, der ein anderes Verhalten als das Standardverhalten bieten kann.
Wenn der new-handler zurückkehrt, wiederholt die Allokationsfunktion den zuvor fehlgeschlagenen Allokationsversuch und ruft den new-handler erneut auf, wenn die Allokation erneut fehlschlägt. Um die Schleife zu beenden, kann der new-handler std::set_new_handler(nullptr) aufrufen: Wenn nach einem fehlgeschlagenen Allokationsversuch die Allokationsfunktion feststellt, dass std::get_new_handler einen Nullzeigerwert zurückgibt, wirft sie std::bad_alloc.
Beim Programmstart ist der new-handler ein Nullzeiger.
|
Diese Funktion ist threadsicher. Jeder Aufruf von |
(seit C++11) |
Parameter
| new_p | - | Zeiger auf eine Funktion vom Typ std::new_handler oder ein Nullzeiger |
Rückgabewert
Der zuvor installierte new-Handler oder ein null-Zeigerwert, falls keiner installiert war.
Beispiel
#include <iostream> #include <new> void handler() { std::cout << "Memory allocation failed, terminating\n"; std::set_new_handler(nullptr); } int main() { std::set_new_handler(handler); try { while (true) { new int[1000'000'000ul](); } } catch (const std::bad_alloc& e) { std::cout << e.what() << '\n'; } }
Mögliche Ausgabe:
Memory allocation failed, terminating std::bad_alloc
Siehe auch
|
Allokierungsfunktionen
(Funktion) |
|
|
(C++11)
|
ermittelt den aktuellen New-Handler
(Funktion) |
|
Funktionszeigertyp des New-Handlers
(Typdefinition) |
|
|
Exception bei fehlgeschlagener Speicherallokation
(Klasse) |