Namespaces
Variants

std:: set_new_handler

From cppreference.net
< cpp ‎ | memory ‎ | new
Utilities library
Memory management library
( exposition only* )
Allocators
Uninitialized memory algorithms
Constrained uninitialized memory algorithms
Memory resources
Uninitialized storage (until C++20)
( until C++20* )
( until C++20* )
( until C++20* )

Garbage collector support (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
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:

1) mehr Speicher verfügbar machen,
2) das Programm beenden (z.B. durch Aufruf von std::terminate ),
3) wirft eine Ausnahme vom Typ std::bad_alloc oder von std::bad_alloc abgeleitet.

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 std::set_new_handler synchronizes-with (siehe std::memory_order ) den nachfolgenden std::set_new_handler und std::get_new_handler Aufrufen.

(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)
ermittelt den aktuellen New-Handler
(Funktion)
Funktionszeigertyp des New-Handlers
(Typdefinition)
Exception bei fehlgeschlagener Speicherallokation
(Klasse)