在我的 C++11 代码中,我在以下情况下收到 clang 警告“声明需要退出时析构函数”:
static const std::map<int, const someStruct> mymap = {
{1, {
"A",
"B",
"C"
}},
{2, {
"D",
"E",
"F"
}}
};
据我了解,谷歌需要一个“退出时间析构函数”来以一种确定的方式销毁 main() 和静态变量,以防止由于“已经发布的变量”而导致退出时崩溃。是对的吗?有人可以更好地解释吗?
另外:我该怎么办(我不想禁用警告)?上面的代码仅在一个线程的上下文中使用。
看起来这就是 Chromium 处理这些情况的方式;这也是我的情况的正确方法吗?
#define CR_DEFINE_STATIC_LOCAL(type, name, arguments) \
static type& name = *new type arguments
(来源:https ://chromium.googlesource.com/chromium/src/+/32352ad08ee673a4d43e8593ce988b224f6482d3/base/basictypes.h )