2010-02-17 20 views
9

Załóżmy, że mam:destructor statyczny

void foo() { 
    static Bar bar; 
} 

Czy C++ gwarantuje mi, że Bar :: Bar() jest wywoływana na barze, a Bar :: ~ Bar() nigdy nie jest wywoływana na pasku? (Aż po głównych wyjściach).

Dzięki!

Odpowiedz

13

Tak. Po raz pierwszy zostanie wywołany foo(), Bar bar. Będzie on dostępny do momentu zakończenia main(), po czym zostanie zniszczony.

To zasadniczo:

static Bar *bar = 0; 
if (!bar) 
{ 
    bar = new Bar; 

    // not "real", of course 
    void delete_bar(void) { delete bar; } 
    atexit(delete_bar); 
} 

Uwaga powiedziałem "zasadniczo"; to chyba nie tak się dzieje (chociaż nie sądzę, że to za daleko).


3.7.1 Statyczny czas przechowywania
1 Wszystkie obiekty, które nie mają dynamiczny okres przechowywania nie są lokalne mają statyczny czas przechowywania. Przechowywanie tych obiektów trwa przez czas trwania programu (3.6.2, 3.6.3).