new[] delete wann error?
-
Hi!
Irgendwer schrieb:
Also ist
delete new [4];
gleich schlimm wie:
void main(void)
Es ist nicht Standard aber jeder existierender Compiler kommt damit klar
Kommt nicht, wie z.B. der VC++, der akzeptiert das nicht (void main()).
Code-Hacker
-
@irgendwer: warum liefert dann delete und delete[] im Bsp.von E.Henkes verschiedene Reaktionen, wenn diese gleich sind? Dein allgemeines Gerede kapier ich nicht.
-
es ist einfach undefiniertes verhalten- basta.
ärger bekommt man irgendwie schon noch
-
@irgendwer: warum liefert dann delete und delete[] im Bsp.von E.Henkes verschiedene Reaktionen, wenn diese gleich sind?
War die Frage jetzt ernst gemeint?
Weil A in seinem Beispiel einen Dtor hat und es geht um dtorlose Type.
-
Kein Wunder, dass viele C++ den Rücken kehren, bei solchen Fallstricken und undefinierten Möglichkeiten.
-
lool so kann mans natürlich auch sehen
aber in nem großen code weis man bei einem delete[] sofort, dass damit ein array gemeint ist, und mit einem delete sieht man sofort dass ein einzelnes objekt gemeint ist, sowas fördert die übersichtlichkeit-selbst wenn dem compiler egal sit, welches delete man benutzt
-
otze schrieb:
aber in nem großen code weis man bei einem delete[] sofort, dass damit ein array gemeint ist, und mit einem delete sieht man sofort dass ein einzelnes objekt gemeint ist, sowas fördert die übersichtlichkeit-selbst wenn dem compiler egal sit, welches delete man benutzt
ich halte das aber für irrelevant ob ich ein Array oder ein normales Objekt zerstöre.
Der Grund warum C++ da trennt ist einfach die Performance
-
wat passiert eigentlich, wenn ich immer delete[] verwende?
wäre das sicher?
-
hyperschlau schrieb:
wat passiert eigentlich, wenn ich immer delete[] verwende?
wäre das sicher?Nein. Es sei denn du wuerdest auch immer new[] verwenden.
Aber das ganze ist doch irrelevant - da man sowieso kein falsches delete verwendet. Warum? Weil man Arrays so schoen in Klassen stecken kann...
Abgesehen davon, ist ein delete mit delete[] verwechseln ein Anfaengerfehler, mehr nicht.
-
Warum warnt der Compiler eigentlich nicht davor?
-
void foo (char *c) { delete c; //oder lieber delete [] c; } //bei int x; cin >> x; x ? foo(new char) : foo(new char[23]);
weil er es oft einfach nicht wissen kann
-
Erhard Henkes schrieb:
Warum warnt der Compiler eigentlich nicht davor?
Das Frage ich mich auch.
Er kann es zwar oft nicht wissen, andererseits gibt es genügend Situationen wo er es weiss.Zumindest sollte in der Debug Variante ein assert fliegen...