std::set_new_handler
| Definiert im 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) | |
Legt new_p als neuen globalen New-Handler fest und gibt den zuvor installierten New-Handler zurück.
Die Funktion new-handler wird von Allokationsfunktionen aufgerufen, wann immer ein Speicherallokationsversuch fehlschlägt. Ihr beabsichtigter Zweck ist einer von drei Punkten:
Die Standardimplementierung löst std::bad_alloc aus. Der Benutzer kann seinen eigenen new-handler installieren, der ein anderes Verhalten als die Standardimplementierung bieten kann.
Wenn der new-handler zurückkehrt, wiederholt die Allokationsfunktion den zuvor fehlgeschlagenen Allokationsversuch und ruft den new-handler erneut auf, falls die Allokation erneut fehlschlägt. Um die Schleife zu beenden, kann der new-handler std::set_new_handler(nullptr) aufrufen: Wenn eine Allokationsfunktion nach einem fehlgeschlagenen Allokationsversuch feststellt, dass std::get_new_handler einen Nullzeigerwert zurückgibt, löst sie std::bad_alloc aus.
Beim Programmstart ist der new-handler ein Nullzeiger.
|
Diese Funktion ist threadsicher. Jeder Aufruf von |
(seit C++11) |
Inhalt |
[edit] Parameter
| new_p | - | Zeiger auf eine Funktion vom Typ std::new_handler oder ein Nullzeiger. |
[edit] Rückgabewert
Der zuvor installierte New-Handler oder ein Nullzeigerwert, falls keiner installiert war.
[edit] 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
[edit] Siehe auch
| Allokationsfunktionen (Funktion) | |
| (C++11) |
holt den aktuellen new handler (Funktion) |
| Funktionszeigertyp des new handlers (Typedef) | |
| Ausnahme, die ausgelöst wird, wenn die Speicherallokation fehlschlägt (Klasse) |