2010-02-17 95 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)。