Ответ 1
Вот более простой случай, который вызывает одно и то же предупреждение:
class A {
public:
// ...
A();
};
A my_A; // triggers said warning
test.cpp:7:3: warning: declaration requires a global constructor [-Wglobal-constructors]
A my_A; // triggers said warning
^~~~
1 warning generated.
Это совершенно законный и безопасный С++.
Однако для каждого нетривиального глобального конструктора, который у вас есть, время запуска вашего приложения страдает. Предупреждение - это просто способ сообщить об этой потенциальной проблеме производительности.
Вы можете отключить предупреждение с помощью -Wno-global-constructors. Или вы можете перейти к ленивой схеме инициализации следующим образом:
A&
my_A()
{
static A a;
return a;
}
который полностью исключает проблему (и подавляет предупреждение).