在全局破坏期间,全局布尔变量是否可靠?

时间:2018-05-30 08:32:57

标签: c++ global-variables destructor object-lifetime

如果我有一个简单的数据类型作为全局变量 - 就像一个布尔标志;特别是,没有析构函数的东西 - 即使在全球破坏期间,该变量是否仍然可靠?或者这不保证?

例如,以下代码的结果是否定义明确?

Flag.h:

void SetFlagState(bool flag);
bool GetFlagState();

Flag.cpp:

#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);
}

1 个答案:

答案 0 :(得分:4)

是的,这是安全的。存储的生命周期是程序的持续时间。这一生中的主要问题是初始化时刻(通过你的g_Flagchecker)。因为没有这样的事情&#34;去初始化&#34;对于内置类型,只要您的流程中有代码执行,您的g_flag仍然有效。