std:: set_new_handler
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Functions | ||||
|
(C++11)
|
||||
|
set_new_handler
|
||||
| Classes | ||||
|
(C++11)
|
||||
|
(C++17)
|
||||
| Types | ||||
| Objects | ||||
|
(C++20)
|
||||
| Object access | ||||
|
(C++17)
|
|
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) | |
Macht new_p zur neuen globalen 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 beabsichtigter Zweck ist einer von dreien:
Die Standardimplementierung wirft std::bad_alloc . Der Benutzer kann einen eigenen new-handler installieren, der ein anderes Verhalten als der Standardhandler 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 die Allokationsfunktion nach einem fehlgeschlagenen Allokationsversuch feststellt, dass std::get_new_handler einen Nullzeiger zurückgibt, wird sie std::bad_alloc werfen.
Beim Programmstart ist der new-handler ein Nullzeiger.
|
Diese Funktion ist thread-sicher. Jeder Aufruf von
|
(since C++11) |
Inhaltsverzeichnis |
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) |