Me pregunto, para ningún otro propósito que pura curiosidad (porque nadie DEBERÍA escribir código así) sobre cómo el comportamiento de RAII se acopla con el uso de goto (preciosa idea no es) .¿Qué sucede cuando combinamos RAII y GOTO?
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();
}
Cuando ejecuto el siguiente código en Visual Studio 2005 obtengo el siguiente resultado.
1,2,3 BOO!
Sin embargo, me imaginaba, adivinado, la esperanza de que 'BOO!' en realidad no aparecería como Ghost nunca debería haberse instanciado (en mi humilde opinión, porque no sé el comportamiento real esperado de este código).
¿Qué pasa?
me he dado cuenta de que si una instancia de un constructor explícito para Ghost el código no compila ...
class Ghost
{
public:
Ghost()
{
printf(" HAHAHA! ");
}
~Ghost()
{
printf(" BOO! ");
}
};
Ah, el misterio ...
Creo que el comportamiento es correcto. De lo contrario, ¿cómo podría referirse a la variable g después de JUMP? – leiz
http://xkcd.com/292/ –