假设我有以下内容:
C++能保证Bar::Bar()在bar上被调用,并且Bar::~Bar()永远不会在bar上被调用吗?(直到main函数执行完毕后)。
谢谢!
void foo() {
static Bar bar;
}
C++能保证Bar::Bar()在bar上被调用,并且Bar::~Bar()永远不会在bar上被调用吗?(直到main函数执行完毕后)。
谢谢!
void foo() {
static Bar bar;
}
是的。第一次调用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)。