В моем коде С++ 11 я получаю предупреждение clang "Декларация требует деструктора времени выхода" в следующем случае:
static const std::map<int, const someStruct> mymap = {
{1, {
"A",
"B",
"C"
}},
{2, {
"D",
"E",
"F"
}}
};
Насколько я понимаю, Google "деструктор времени выхода" должен уничтожать main() и статику детерминированным способом для предотвращения сбоев при выходе из-за "уже выпущенных переменных". Это правильно? Может кто-нибудь объяснить это лучше?
Плюс: Что я могу сделать с этим (я не хочу отключать предупреждение)? Приведенный выше код используется только в контексте только одного потока.
Похоже, так Хром относится к этим случаям; это будет правильным способом для моего дела?
#define CR_DEFINE_STATIC_LOCAL(type, name, arguments) \
static type& name = *new type arguments
(Источник: https://chromium.googlesource.com/chromium/src/+/32352ad08ee673a4d43e8593ce988b224f6482d3/base/basictypes.h)