【发布时间】:2017-01-25 03:50:51
【问题描述】:
关于 C++ 中静态变量的销毁顺序,对于静态对象的静态成员变量的生命周期是否有任何保证?
例如,如果我有这样的事情(仅用于演示目的的疯狂简化示例):
class Object {
static std::vector< Object * > all_objects;
public
Object() {
all_objects.push_back( this );
}
~Object() {
all_objects.erase(
std::remove(all_objects.begin(), all_objects.end(), this),
all_objects.end());
}
};
对于不同编译单元中的静态对象,这是否“安全”?也就是说,是否有任何保证 all_objects 成员变量将至少与任何有效的 Object 一样存在,或者是否存在 all_objects 在最后一个 Object 实例之前被销毁的问题?
如果代码被用作库(比如在 Python 中)而不是用作具有自己的 main() 的独立程序,答案是否会改变?
【问题讨论】:
标签: c++ language-lawyer destructor