在我的C++11代码中,我遇到了以下情况的clang警告:“Declaration requires an exit-time destructor”:
static const std::map<int, const someStruct> mymap = {
{1, {
"A",
"B",
"C"
}},
{2, {
"D",
"E",
"F"
}}
};
据我所知,Google认为需要使用“退出时间析构函数”以确定的方式销毁main()和静态变量,以防止由于“已释放变量”导致退出时崩溃。这是正确的吗?可以有人用更好的方式解释一下吗?
此外:我该怎么办(我不想禁用警告)?上面的代码仅在一个线程的上下文中使用。
看起来这是Chromium处理这些情况的方式;那对我的情况来说是否正确呢?
#define CR_DEFINE_STATIC_LOCAL(type, name, arguments) \
static type& name = *new type arguments
的内容已被翻译。
someStruct
的析构函数所做的操作,我通常会谨慎防止析构函数被运行。在程序退出时,管理内存可能不再是一个问题,但其他非平凡操作仍然可能需要运行。在更复杂的情况下,很快就变得难以证明不运行析构函数没有不良影响。此外,在释放大量内存时才会注意到程序退出时的减速。 - Konrad Rudolph