Tengo una aplicación masiva (varios millones de archivos LOC y decenas de miles de archivos), y estoy tratando de utilizar el crt de depuración para detectar fugas de memoria. Estoy tratando de macro-Ize nueva de este modo:reemplazando nuevo con conflictos de macro con ubicación nueva
#define _CRTDBG_MAP_ALLOC
#include <crtdbg.h>
#ifndef NEW_DEBUG
#define NEW_DEBUG new(_NORMAL_BLOCK, __FILE__, __LINE__)
#define new NEW_DEBUG
#endif
Ahora, mi aplicación es tan grande, así que para mí, a ser posible, me gustaría poner esto en un archivo de cabecera e incluyen específicamente que en decenas de miles de Archivos CPP No es una tarea divertida. Así que he intentado colocar esto en un archivo de encabezado común en nuestro SDK, que se incluirá en cada unidad de traducción.
El problema que me encuentro es que parece chocar con algunos archivos de encabezado STL, y el compilador emite errores cuando se usa la ubicación nueva. Puedo cambiar eso en mi propio código, usando pragma y deshabilitando la nueva macro. No hay problema allí. Son los archivos de encabezado STL que usan la ubicación nueva, no puedo cambiar.
He descubierto un work-around, reorganizando las directivas include en los archivos cpp. Por ejemplo:
// doesn't compile
#include "new_redirect.h"
#include <map> // for instance
// does compile
#include <map> // for instance
#include "new_redirect.h"
Pero esta es una difícil solución alternativa porque, de nuevo, tengo que ir a modificar miles de archivos, y asegurarse de que sus cabeceras de STL se incluyen antes cualquier otra cosa. Lo irónico es que he creado una aplicación hello world para probar específicamente este problema: Y la aplicación hola-mundo compilada muy bien. Pero mi aplicación masiva no lo hace, sin esta solución.
Así que mis preguntas son:
- Alguien ha sido capaz de macro-ize nuevo por completo sin moviéndose por cantidades masivas de código? (De una manera relativamente indolora)
- ¿Alguna otra forma de evitar la reorganización de mi encabezado STL incluye directivas?
Gracias
visto esta pregunta http://stackoverflow.com/questions/4301505/compile- errors-when-i-using-crt-memory-leak-detection? – sharptooth
No, no lo he hecho, pero después de leerlo, se siente como el clavo en el ataúd de mis esperanzas de usar esto ... –
La redefinición de "nuevo" suele ser una mala idea (tm). También vea [aquí] (http://stackoverflow.com/questions/3202520/) y [aquí] (http://stackoverflow.com/questions/1326656/). –