Tengo un programa en el que, en parte para el registro informativo, obtengo los nombres de algunas clases a medida que se utilizan (específicamente, agrego una entrada a un registro que dice lo siguiente Messages::CSomeClass transmitted to 127.0.0.1
). Lo hago con un código similar al siguiente:Fugas de memoria después de utilizar typeinfo :: name()
std::string getMessageName(void) const {
return std::string(typeid(*this).name());
}
Y sí, antes de que nadie lo señala, me doy cuenta de que la salida de typeinfo::name
es específico de la implementación.
Según MSDN
La función miembro
type_info::name
devuelve unconst char*
a una cadena terminada en nulo que representa el nombre legible por humanos del tipo. La memoria apuntada se almacena en caché y nunca se debe desasignar directamente.
Sin embargo, cuando salgo de mi programa en el depurador, aparece un "nuevo" uso de typeinfo::name()
como una pérdida de memoria. Si genero la información para 2 clases, obtengo 2 pérdidas de memoria, y así sucesivamente. Esto sugiere que los datos en caché nunca se liberan.
Si bien esto no es un problema importante, parece desordenado, y después de una larga sesión de depuración podría ocultar fácilmente fugas de memoria genuinas.
He mirado alrededor y he encontrado información útil (una respuesta SO da información interesante sobre how typeinfo may be implemented), pero me pregunto si esta memoria normalmente debería ser liberada por el sistema, o si hay algo que pueda hacer para "no notar" las fugas cuando se depura.
Tengo un plan de copia de seguridad, que es codificar el método getMessageName
y no confiar en typeinfo::name
, pero me gustaría saber de todos modos si hay algo que me he perdido.
Posiblemente relevante? [http://connect.microsoft.com/VisualStudio/feedback/details/106937/memory-leaks-reported-by-debug-crt-inside-typeinfo-name](http://connect.microsoft.com/VisualStudio/ comentarios/detalles/106937/memory-leaks-reported-by-debug-crt-inside-typeinfo-name). Qué compilador estas usando? Tal vez intente con un compilador diferente si eso es posible. –
Dado que está en caché, no se preocupe. – Jagannath
@jagansai: No estoy preocupado por la filtración en sí misma, ya que solo afecta la salida del depurador al salir de la aplicación; mi preocupación es que podría ocultar pérdidas de memoria * real *. Y parece desordenado. Me gusta la depurada salida del depurador :) – icabod