关于在C++中销毁静态变量的顺序,是否有任何有关静态对象相对于其静态成员变量的生命周期的保证?在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
成员变量将至少与任何有效对象一样长,或者在最后一个对象实例之前可能会销毁all_objects
?
并会在被用作库中的代码的答案变化(Python中说),而不是与自己的主要一个独立的程序()?
函数级静态变量与全局(或类)级静态变量的破坏顺序规则是什么?我们确定'all_objects'会坚持到所有的静态对象消失吗? –
@ R.M。,请参阅最新的答案。 –
“构造函数的完成”是否改变了一些东西?例如http://stackoverflow.com/a/335746/3022952表明,当您在Object的构造函数中调用get_all_objects()函数时,all_objects变量将在完成第一个Object的构造函数之前完成其构造函数,这意味着all_objects的析构函数只会在所有*对象的析构函数完成后调用。或者我解释错了什么? –