Supongamos que tengo:destructor estática
void foo() {
static Bar bar;
}
¿Tiene C++ me garantiza que Bar :: Bar() se llama en la barra y barra de bar :: ~() no se llama en la barra? (Hasta después de las salidas principales).
Gracias!
Supongamos que tengo:destructor estática
void foo() {
static Bar bar;
}
¿Tiene C++ me garantiza que Bar :: Bar() se llama en la barra y barra de bar :: ~() no se llama en la barra? (Hasta después de las salidas principales).
Gracias!
Sí. La primera vez que se llama foo()
, se construirá Bar bar
. Luego estará disponible hasta que finalice el main()
, luego de lo cual será destruido.
Básicamente se trata de:
static Bar *bar = 0;
if (!bar)
{
bar = new Bar;
// not "real", of course
void delete_bar(void) { delete bar; }
atexit(delete_bar);
}
Nota dije "esencialmente"; esto probablemente no es lo que realmente sucede (aunque no creo que esté demasiado lejos).
3.7.1 duración de almacenamiento estático
1 Todos los objetos que no tienen una duración de almacenamiento dinámico ni son locales tienen una duración de almacenamiento estático. El almacenamiento para estos objetos durará por la duración del programa (3.6.2, 3.6.3).