Das folgende Code-Beispiel stammt aus dem Buch
Objektorientiertes Programmieren in C++
- Ein Tutorial für Ein- und Umsteiger
von Nicolai Josuttis, Addison-Wesley München, 2001
© Copyright Nicolai Josuttis 2001
// Headerdatei für den New-Handler
#include <new>
// Standard-Headerdateien
#include <iostream>
// Vorwärtsdeklaration
static void eigenerNewHandler();
// Reserve-Speicherplatz
static char* reserveSpeicherplatz1;
static char* reserveSpeicherplatz2;
void initNewHandler ()
{
// je nach Bedarf Reserve-Speicherplatz anfordern
reserveSpeicherplatz1 = new char[1000000];
reserveSpeicherplatz2 = new char[100000];
// New-Handler installieren
std::set_new_handler(&eigenerNewHandler);
}
static void eigenerNewHandler ()
{
static bool firstKiss = true;
// - beim ersten Mal: Reserve-Speicherplatz bereitstellen
// - beim zweiten Mal: Ausnahme auslösen
if (firstKiss) {
// Programm läuft weiter bis zum zweiten Aufruf
firstKiss = false;
// ersten Speicherplatz für New-Handler freigeben
delete [] reserveSpeicherplatz1;
// Warnung auf Standard-Fehlerkanal ausgeben
std::cerr << "Warnung: Speicherplatz bald alle" << std::endl;
}
else {
// zweiten Reserve-Speicherplatz für New-Handler freigeben
delete [] reserveSpeicherplatz2;
// Fehlermeldung auf Standard-Fehlerkanal ausgeben
std::cerr << "Speicherplatz endgueltig alle" << std::endl;
// entsprechende Exception auslösen
throw std::bad_alloc();
}
}