Was ist daran "falsch"
-
Folgender Code, was ist alles nicht standardkonform bzw. illegal:
#include <iostream> using namespace std; class foo { public: void bar () { cout << "foo::bar\n"; } }; int main () { foo &boo = *new foo; delete &boo; boo.bar (); }
Comeau sagt:
Comeau C/C++ 4.3.1 (Mar 1 2003 20:09:34) for ONLINE_EVALUATION_BETA1
Copyright 1988-2003 Comeau Computing. All rights reserved.
MODE:strict errors C++
In strict mode, with -tused, Compile succeeded (but remember, the Comeau online compiler does not link).und beim MSVC wird auch ein "foo::bar" ausgegeben.
2.: Wenn ich den this Zeiger in foo::bar benutzen würde, würde es dann illegaler
Code sein, wenn es nicht schon welcher ist?
-
Illegal, da Du eine Referenz auf etwas benutzt, das dir nicht gehört.
-
Der Code ist legal, auch wenn er auf den ersten Blick nicht so aussieht.
-
Der Code ist legal, auch wenn er auf den ersten Blick nicht so aussieht.
Tatsächlich. Ich halte 3.7.4.2/4 des C++ Standards dagegen und sage die Zeile
boo.bar ();
nach dem delete resultiert in undefiniertem Verhalten.
Was sind deine Argumente?
-
hab den standard zurzeit nicht zur verfügung (bitte schreiben was da steht, und noch viel mehr bitte deine interpretation auf deutsch :D)
-
Ich halte 3.7.4.2/4 des C++ Standards dagegen und sage die Zeile
Das muss übrigens 3.7.3.2/4 heißen.
Dort wird geschrieben, dass ein delete den durch das Argument referenzierten Speicher freigibt und das damit *alle* Referenzen auf diesen Speicher (oder auf Teile von diesem) ungültig werden. Jede Benutzung einer solchen nun ungültigen Referenz führt zu undefiniertem Verhalten.