2009-02-06 13 views
10

Cuando se crea una nueva aplicación de MFC, el asistente crea el siguiente bloque de código en casi todos los archivos CPP:¿Son realmente necesarios "#define new DEBUG_NEW" y "#undef THIS_FILE" etc.?

#ifdef _DEBUG 
#define new DEBUG_NEW 
#endif 

ya veces también añade esto:

#undef THIS_FILE 
static char THIS_FILE[] = __FILE__; 

me gustaría quitar este código de mis archivos CPP si es redundante. Estoy usando una aplicación MFC con C++/CLI en VS2008.

He intentado ejecutar en depuración después de eliminar este código de un CPP, y parece funcionar bien. Las variables "nuevas" funcionan bien, no hay fugas y los diálogos ASSERT muestran el nombre de archivo correcto y saltan a la línea ofensiva.

¿Alguien puede decirme qué hace y si es seguro eliminarlo?

Respuesta

10

Es perfectamente seguro eliminar esto. Es una ayuda de depuración; dejarlo generará advertencias en la ventana de salida de cualquier pérdida de memoria que tenga cuando el programa salga.

+0

¿Estás seguro? VS2008 todavía muestra un volcado de objetos de pérdida de memoria después de que eliminé el bloque de código. Tal vez este solía ser el caso en VC6 o algo ...? – demoncodemonkey

+1

Lo siento, me acabo de dar cuenta de que hay una sutileza en lo que dice: cuando el código está allí, la ventana de salida muestra el nombre y la línea que contiene la pérdida de memoria, en lugar de solo mostrar que hay una pérdida de memoria. – demoncodemonkey

+0

Eso explica la primera parte del código generado. ¿Qué hay de la segunda parte? #undef THIS_FILE carácter estático THIS_FILE [] = __FILE__; – demoncodemonkey

1

En Microsoft Visual C++ 2010, puedo eliminar todo el código y poner solo un #define NEW DEBUG_NEW en un encabezado, y sigo recibiendo los informes correctos de pérdida de memoria, p.

Detected memory leaks! 
Dumping objects -> 
f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\strcore.cpp(156) : {7508} normal block at 0x029B9598, 54 bytes long. 
Data: <    > E4 B8 C9 00 12 00 00 00 12 00 00 00 01 00 00 00 
f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\strcore.cpp(156) : {7501} normal block at 0x029B94A8, 28 bytes long. 
Data: <    > E4 B8 C9 00 05 00 00 00 05 00 00 00 01 00 00 00 
f:\source\agent\agent\deviceid.cpp(21) : {7500} normal block at 0x029CDFC0, 8 bytes long. 
Data: <  > A8 95 9B 02 B8 94 9B 02 
f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\strcore.cpp(156) : {6786} normal block at 0x029C0D88, 160 bytes long. 
Data: <  G  > E4 B8 C9 00 19 00 00 00 47 00 00 00 01 00 00 00 
f:\source\agent\sysinfo\sysinfo.cpp(27) : {6733} normal block at 0x029B84D8, 92 bytes long. 
Data: <    > 00 00 00 00 00 10 00 00 00 00 01 00 FF FF FE 7F 
Object dump complete. 
+3

No, no obtienes toda la información. Observe cómo el código que muestra solo muestra la fuga en 'strcore.cpp' que indica que ha filtrado un objeto CString (o algo así). Con el desplazamiento DEBUG_NEW/THIS_FILE correcto, también informaría el lugar en * su * código donde hizo el 'nuevo' –

Cuestiones relacionadas