Supponiamo che io sono:distruttore statica
void foo() {
static Bar bar;
}
Ha C++ mi garantisce che Bar :: Bar() viene chiamato sulla barra, e il Bar :: ~ Bar() non viene mai chiamato bar? (Fino a dopo le uscite principali).
Grazie!
Supponiamo che io sono:distruttore statica
void foo() {
static Bar bar;
}
Ha C++ mi garantisce che Bar :: Bar() viene chiamato sulla barra, e il Bar :: ~ Bar() non viene mai chiamato bar? (Fino a dopo le uscite principali).
Grazie!
Sì. La prima volta che viene chiamato foo()
, verrà creato il numero Bar bar
. Sarà quindi disponibile fino alle finiture main()
, dopodiché verrà distrutto.
E 'essenzialmente:
static Bar *bar = 0;
if (!bar)
{
bar = new Bar;
// not "real", of course
void delete_bar(void) { delete bar; }
atexit(delete_bar);
}
nota ho detto "essenzialmente"; questo probabilmente non è ciò che realmente accade (anche se non penso sia troppo lontano).
3.7.1 Static durata di storage
1 Tutti gli oggetti che non hanno durata di conservazione dinamica né sono locali hanno una durata di archiviazione statica. La conservazione di questi oggetti deve durare per la durata del programma (3.6.2, 3.6.3).