静态析构函数

ano*_*non 9 c++ static destructor

假设我有:

void foo() {
  static Bar bar;
}
Run Code Online (Sandbox Code Playgroud)

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

谢谢!

GMa*_*ckG 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);
}
Run Code Online (Sandbox Code Playgroud)

注意我说"基本上"; 这可能不是实际发生的事情(尽管我认为它并不太遥远).


3.7.1静态存储持续时间
1所有既没有动态存储持续时间也没有本地的对象都有静态存储持续时间.这些对象的存储应持续到程序的持续时间(3.6.2,3.6.3).