Одна из проблем со статикой заключается в том, что вы не можете контролировать, когда они создаются при загрузке вашей программы. В режиме DEBUG компилятор делает много вещей иначе, чем в режиме RELEASE. Одна из тех вещей - это то, как она управляет памятью.
Вполне вероятно, что вам просто повезло в DEBUG, что ваша память не перезаписывается другими процессами, и значение есть, когда ваша программа этого хочет.
Один из подходов, который я использовал для достижения большого эффекта, - это вариант синглтона Meyers. (Это очень хорошо детализировано в C ++ В Теории: Шаблон Синглтона - Дж. Накамура
Несмотря на то, что вам не нужен синглтон, подход можно использовать для решения вашей проблемы следующим образом:
class MySample
{
MySample() {}
<etc.>
static const std::string& GetStaticValue()
{
static std::string my_val = "Hello World";
return my_val;
}
}
Основная выгода очень хорошо объяснена г-ном Накамурой в вышеприведенной статье:
Эта конструкция опирается на тот факт, что функционально-статические объекты инициализируются только при первом вызове функции; таким образом, мы поддерживаем преимущество динамической инициализации. (Функционально-статические примитивные переменные, такие как static int number = 100; однако переводятся во время компиляции!)