2010-02-17 11 views
9

varsayalım Ben:statik yıkıcı

void foo() { 
    static Bar bar; 
} 

c Bar :: Bar() çubuğunda denir bana garanti ++ mu, ve Çubuk :: ~ Bar() çubuğunda hiçbir zaman denir? (Ana çıkıştan sonraya kadar).

Teşekkürler!

cevap

13

Evet. İlk defa foo() denen, Bar bar inşa edilecektir. Daha sonra main() bitirene kadar kullanılabilir olacak, sonra nokta imha edilecek.

Aslında var:

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

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

Not I "esasen" dedi; Bu muhtemelen gerçekleşen şey değil (gerçi çok uzak olduğunu düşünmüyorum).


3.7.1 dinamik depolama süresine sahip ne de yerel ne Tüm nesneler statik depolama süresine sahip
1 Statik saklama süresi. Bu nesnelerin depolanması, programın süresi boyunca devam edecektir (3.6.2, 3.6.3).