Является ли глобальная логическая переменная надежной во время глобального уничтожения? - PullRequest
0 голосов
/ 30 мая 2018

Если у меня есть простой тип данных в качестве глобальной переменной - например, логический флаг;в частности, то, что не имеет деструктора - остается ли эта переменная надежной даже во время глобального разрушения?Или это не гарантировано?

Например, будет ли четко определен результат для следующего кода?

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 голосов
/ 30 мая 2018

Да, это безопасно.Время жизни хранилища - это продолжительность программы.Главная проблема в течение этой жизни связана с моментом инициализации (через ваш g_Flagchecker).Поскольку для встроенных типов не существует такой «деинициализации», ваш g_flag остается действительным, пока в вашем процессе выполняется код.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...