new und exception?
-
Hi,
ich hab da ein problem, aber erstmal code:
#define NEW(ptr,type) try{(ptr)=new (type);}catch(std::bad_alloc){return (false);}
Momentan intialisiere ich pointer immer so, doch naja ist nicht gerade die beste methode, kennt jemand noch ne bessere als mit so nem makro?
-
mir stellt sich die frage: was willst du erreichen?
bzw. zu welchem zweck?
-
Vermutlich will er verhindern das eine Exception fliegt wenn der Speicher nicht beschafft werden kann und dafür lieber ein false zurück haben ?!
-
warum das bad_alloc nicht fliegen lassen, meinte ich.
vor allem die "momentan initialisiere ich pointer immer so"-Aussage ist doch seltsam.
OP: du verhinderst so doch zb in main jegliche Fehlerbehandlung.
-
Wenn man sowas wirklich braucht (was mir eigentlich nicht ganz einleuchten mag, aber sei's drum), dann macht man das mit new(nothrow):
#include <new> Foo* pfoo = new(std::nothrow) Foo; if (!pfoo) { // Fehlerbehandlung }
Die Exception würde ich aber immer vorziehen. Wenn überhaupt irgendein Fehler den Namen Ausnahme verdient, dann ein new-Fehlschlag
-
wie würdet ihr denn die Exception handhaben?
-
[quote="Bashar"]Foo* pfoo = new(std::nothrow) Foo;
if (!pfoo) {
// Fehlerbehandlung
}
[/cpp]Man lernt nicht aus...
thx
-
ffffffffffff schrieb:
wie würdet ihr denn die Exception handhaben?
Das ist natürlich abhängig von der konkreten Anwendung. Im Allgemeinen würde ich die Tatsache, dass es keinen Speicher mehr gibt notieren und dann das Programm freundlich aber bestimmt beenden.
int main(int argc, char** argv) { try { Application app(argc, argv); return app.run(); } catch(const std::bad_alloc&) { cerr << "Whups! We ran out of memory." << endl; return NO_MEM; } catch(const std::exception& e) { cerr << "Exception: " << e.what(); return -1; } catch(...) { cerr << "Arr! Unknown Exception!" << endl; cerr << "Call 999-BAD-BUGS" << endl; return BAD_BUG; } }