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