2010-02-17 17 views
9

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!

risposta

13

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).