2010-02-17 108 views
9

假設我有:靜態析構函數

void foo() { 
    static Bar bar; 
} 

難道C++保證我吧::酒吧()調用酒吧和酒吧::〜欄()是從來沒有所謂的上吧? (直到主要退出之後)。

謝謝!

回答

13

是。第一次foo()被調用時,Bar bar將建成。然後它將可用,直到main()完成,此後它將被破壞。

它本質上是:

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

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

注意我說 「基本上」;這可能不是實際發生的事情(儘管我不認爲它太遙遠)。


3.7.1靜態存儲持續時間
1中的所有對象既不具有動態存儲持續時間也不是本地具有靜態存儲持續時間。這些對象的存儲應該在程序的持續時間內持續(3.6.2,3.6.3)。