new-handler
-
Hallo leute.
Ich habe mal eine frage.
und zwar...weiss jemand von euch wie man einen new-Handler selbst implementiert?für tipps wäre ich sehr erfreut
danke schonmal im voraus
-
kannst ignorieren kein gängiges system ist noch benutzbar wenn es tatsächlich keinen speicher mehr gibt, die machen schon vorher schlapp
-
Du meinst Operator new? Das ist relativ einfach.
void* operator new(std::size_t size) throw(std::bad_alloc) { void* p = /* hier mittels deines Speichermanagers den benoetigten Speicher (size) reservieren */; if (!p) throw std::bad_alloc(); return p; }Du solltest aber darauf achten, zu jedem Operator new einen passenden Operator delete zu implementieren.
void operator delete(void* p) throw() { /* hier mittels deines Speichermanagers den reservierten Speicher (p) freigeben */ }Die Funktionen müssen, sofern es die globen Operatoren new/delete sein sollen, auch im globalen Namensraum implementiert sein.
Selbiges ist übrigens genauso mit new[]/delete[] möglich.
-
sharif schrieb:
Hallo leute.
Ich habe mal eine frage.
und zwar...weiss jemand von euch wie man einen new-Handler selbst implementiert?für tipps wäre ich sehr erfreut
danke schonmal im voraus
das ist nicht weiter schwer:
void (*old_handler)(); void my_handler() { // besorg mehr speicher // optional rufen wir den alten handler auf if ( kein_speicher && old_handler != 0 ) { old_handler(); return; } if ( fehler ) { throw std::bad_alloc(); // oder exit(foo); // oder abort(); } } // und dann irgendwo installieren: old_handler = std::set_new_handler( my_handler ); // und ggf. wieder deinstallieren std::set_new_handler( old_handler );sonderlich sinnvoll ist das im allgemeinen nicht. man könnte es auch für logging zwecke verwenden. im embedded bereich hat es möglicherweise größere bedeutung.