静态析构函数

9
假设我有以下内容:
void foo() {
  static Bar bar;
}

C++能保证Bar::Bar()在bar上被调用,并且Bar::~Bar()永远不会在bar上被调用吗?(直到main函数执行完毕后)。
谢谢!
1个回答

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)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接