静态析构函数

时间:2010-02-17 05:02:59

标签: c++ static destructor

假设我有:

void foo() {
  static Bar bar;
}

c ++是否保证在条形码上调用Bar :: Bar(),并且从不在条形码上调用Bar ::〜Bar()? (直到主要出口之后)。

谢谢!

1 个答案:

答案 0 :(得分: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)。