C++ 全局布尔变量在全局销毁期间可靠吗?
如果我有一个简单的数据类型作为一个全局变量,比如布尔标志;具体地说,没有析构函数的东西——即使在全局销毁过程中,该变量仍然可靠吗?或者这不能保证 例如,以下代码的结果是否定义良好 国旗h: Flag.cpp: 主要内容:C++ 全局布尔变量在全局销毁期间可靠吗?,c++,global-variables,destructor,object-lifetime,C++,Global Variables,Destructor,Object Lifetime,如果我有一个简单的数据类型作为一个全局变量,比如布尔标志;具体地说,没有析构函数的东西——即使在全局销毁过程中,该变量仍然可靠吗?或者这不能保证 例如,以下代码的结果是否定义良好 国旗h: Flag.cpp: 主要内容: 是的,这是安全的。存储的生存期是程序的持续时间。生命周期中的主要问题是通过g_Flagchecker初始化的时刻。由于内置类型不存在取消初始化的情况,因此只要进程中有代码执行,g_标志就会保持有效。是的,这是安全的。存储的生存期是程序的持续时间。生命周期中的主要问题是通过g_F
是的,这是安全的。存储的生存期是程序的持续时间。生命周期中的主要问题是通过g_Flagchecker初始化的时刻。由于内置类型不存在取消初始化的情况,因此只要进程中有代码执行,g_标志就会保持有效。是的,这是安全的。存储的生存期是程序的持续时间。生命周期中的主要问题是通过g_Flagchecker初始化的时刻。由于内置类型没有反初始化这类东西,只要进程中有代码执行,您的g_标志就仍然有效。您确定吗,如果g_标志是一个常规类,我们肯定会遇到问题。同样地,也没有指定哪个全局变量将首先被初始化。@Jarod42:这就是为什么我要指出,对于内置类型来说,没有反初始化这样的事情。类确实有析构函数,并且这些析构函数是在干净退出之前运行的。我认为唯一的问题是,在程序完全退出之前,是否保证取消初始化的存储不能用于任何其他用途@MSalters说生命周期包括退出,所以听起来不错:你确定吗,如果g_Flag是一个普通类,我们肯定会有问题。同样地,也没有指定哪个全局变量将首先被初始化。@Jarod42:这就是为什么我要指出,对于内置类型来说,没有反初始化这样的事情。类确实有析构函数,并且这些析构函数是在干净退出之前运行的。我认为唯一的问题是,在程序完全退出之前,是否保证取消初始化的存储不能用于任何其他用途@MSalters说生命周期包括退出,所以听起来不错:
void SetFlagState(bool flag);
bool GetFlagState();
#include <Flag.h>
namespace { // local declarations
bool g_flag;
}
void SetFlagState(bool flag)
{
g_flag = flag;
}
bool GetFlagState()
{
return g_flag;
}
#include <iostream>
#include <Flag.h>
class FlagChecker
{
public:
~FlagChecker()
{
std::cout << "Flag value: " << GetFlagState() << std::endl;
}
};
FlagChecker g_FlagChecker; // global instance; dtor will be called on exit
int main()
{
SetFlagState(true);
}