代码之家  ›  专栏  ›  技术社区  ›  Ziv

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

  •  1
  • Ziv  · 技术社区  · 7 年前

    如果我有一个简单的数据类型作为全局变量——比如布尔标志;特别是没有析构函数的东西——即使在全局销毁期间,这个变量仍然可靠吗?还是不能保证?

    例如,以下代码的结果是否定义良好?

    标志.h:

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

    标志.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 回复  |  直到 7 年前
        1
  •  4
  •   MSalters    7 年前

    是的,这是安全的。存储的生存期是程序的持续时间。在生命周期中的主要问题是初始化的时刻(通过 g_Flagchecker )由于没有内置类型的“取消初始化”功能,因此 g_flag 只要进程中有代码在执行,就保持有效。