Ich frage mich, für keinen anderen Zweck als pure Neugier (denn niemand sollte jemals Code so schreiben!) Über das Verhalten von RAII Meshes mit der Verwendung von goto (schöne Idee ist es nicht) .Was passiert, wenn wir RAII und GOTO kombinieren?
class Two
{
public:
~Two()
{
printf("2,");
}
};
class Ghost
{
public:
~Ghost()
{
printf(" BOO! ");
}
};
void foo()
{
{
Two t;
printf("1,");
goto JUMP;
}
Ghost g;
JUMP:
printf("3");
}
int main()
{
foo();
}
Wenn Sie den folgenden Code in Visual Studio 2005 ich die folgende Ausgabe.
1,2,3 BOO!
aber ich dachte, erraten, zu hoffen, dass 'BOO!' würde nicht tatsächlich als Ghost sollte nie instanziiert worden sein (IMHO, weil ich nicht das tatsächliche erwartete Verhalten dieses Codes kennen).
Was ist los?
Ich habe erkannt, dass, wenn ich einen expliziten Konstruktor für Ghost instanziiert der Code nicht kompiliert ...
class Ghost
{
public:
Ghost()
{
printf(" HAHAHA! ");
}
~Ghost()
{
printf(" BOO! ");
}
};
Ah, das Geheimnis ...
Ich glaube, das Verhalten ist korrekt. Wie sonst könnte man die Variable g nach JUMP beziehen? – leiz
http://xkcd.com/292/ –