私のC++ 11コードでは、次の場合に「宣言には終了時のデストラクタが必要です」というclang警告が表示されます。
static const std::map<int, const someStruct> mymap = {
{1, {
"A",
"B",
"C"
}},
{2, {
"D",
"E",
"F"
}}
};
私が理解している限り、「既に解放された変数」による終了時のクラッシュを防ぐために、確定的な方法で main() と statics を破棄するには、「終了時デストラクタ」が必要です。そうですか?誰かがそれをよりよく説明できますか?
プラス: どうすればよいですか (警告を無効にしたくありません)。上記のコードは、1 つのスレッドのコンテキスト内でのみ使用されます。
これが Chromium がこれらのケースに対処する方法のようです。それは私の場合にも正しい方法でしょうか?
#define CR_DEFINE_STATIC_LOCAL(type, name, arguments) \
static type& name = *new type arguments