Информация об изменениях

Сообщение Re: Экземпляр static создается множество раз... от 18.07.2019 5:43

Изменено 18.07.2019 5:47 sergii.p

Re: Экземпляр static создается множество раз...
Здравствуйте, _agg, Вы писали:

_>Компилятор не выводит никаких сообщений что он игнорирует этот static, собирается это все в Visual Studio 2017.

_>КАК ТАКОЕ ПРОИСХОДИТ ЭТО ЖЕ STATIC? КАК ОН МОЖЕТ СОЗДАВАТЬСЯ МНОЖЕСТВО РАЗ, ВРАЗУМИТЕ КТО ПОНЯЛ В ЧЕМ ДЕЛО, ЧЕГО Я НЕ ВИЖУ ЧТО ПРИВОДИТ К МНОЖЕСТВЕННОМУ СОЗДАНИЮ ОБЪЕКТА СО СПЕЦИФИКАТОРОМ STATIC?

static относительно глобальной переменной ведёт себя иначе по сравнению с переменной в классе или функции. И не гарантирует единичного создания. Он только говорит, что переменная должна быть уникальна для данного файла. В вашем случае в каждом месте, где вы подключаете transfer.h получаете отдельный экземпляр currentClientVersion.
Можете обернуть переменную currentClientVersion в функцию или класс, или объявить extern const Utils::VERSION currentClientVersion в заголовочном и инициализировать в одном из cpp.
Re: Экземпляр static создается множество раз...
Здравствуйте, _agg, Вы писали:

_>Компилятор не выводит никаких сообщений что он игнорирует этот static, собирается это все в Visual Studio 2017.

_>КАК ТАКОЕ ПРОИСХОДИТ ЭТО ЖЕ STATIC? КАК ОН МОЖЕТ СОЗДАВАТЬСЯ МНОЖЕСТВО РАЗ, ВРАЗУМИТЕ КТО ПОНЯЛ В ЧЕМ ДЕЛО, ЧЕГО Я НЕ ВИЖУ ЧТО ПРИВОДИТ К МНОЖЕСТВЕННОМУ СОЗДАНИЮ ОБЪЕКТА СО СПЕЦИФИКАТОРОМ STATIC?

static относительно глобальной переменной ведёт себя иначе по сравнению с переменной в классе или функции. И не гарантирует единичного создания. Он только говорит, что переменная должна быть уникальна для данного файла. В вашем случае в каждом месте, где вы подключаете transfer.h получаете отдельный экземпляр currentClientVersion.
Можете обернуть переменную currentClientVersion в функцию или класс
Utils::VERSION& getCurrentClientVersion()
{
    static Utils::VERSION currentClientVersion;
    return currentClientVersion;
}

, или объявить extern const Utils::VERSION currentClientVersion в заголовочном и инициализировать в одном из cpp.