c++ - ¿Cómo lidiar con la advertencia del "destructor del tiempo de salida" en clang?
c++11 warnings (1)
En mi código C ++ 11, aparece el aviso de advertencia "La declaración requiere un destructor de tiempo de salida" en el siguiente caso:
static const std::map<int, const someStruct> mymap = {
{1, {
"A",
"B",
"C"
}},
{2, {
"D",
"E",
"F"
}}
};
Según tengo entendido, se requiere un "destructor de tiempo de salida" para destruir main () y statics de una manera determinista para evitar bloqueos en la salida debido a "variables ya publicadas". ¿Está bien? ¿Alguien puede explicarlo mejor?
Más: ¿Qué puedo hacer al respecto (no quiero desactivar la advertencia)? El código anterior se usa dentro del contexto de un solo hilo.
Parece que esta es la forma en que Chromium trata estos casos; ¿Sería ese también el camino correcto para mi caso?
#define CR_DEFINE_STATIC_LOCAL(type, name, arguments) /
static type& name = *new type arguments
Los objetos estáticos globales y funcionales recibirán llamadas a sus destructores cuando su aplicación esté saliendo. Estos destructores son "destructores de tiempo de salida". y son llamados en el orden inverso al que fueron construidos.
Como dijiste, si algunos de estos destructores tocan objetos ya destruidos, tu programa podría fallar. Además, los destructores que se ejecutan en el momento de la salida harán que el programa salga más lento, y la mayoría de las veces no son necesarios para la corrección del programa (ya que cuando el programa sale, liberará toda su memoria de todos modos).
La advertencia simplemente indica que tiene destructores que se ejecutarán en el momento de la salida.
La solución que propuso se asignará al montón, lo que no hará que se destruya automáticamente al salir del programa. Para su caso, esto es probablemente lo suficientemente bueno.