La biblioteca de tiempo de ejecución de Microsoft proporciona la versión de depuración de las funciones de asignación. Para C++ esta es una variante de depuración del operador de nuevo con la firma:Anulación de nuevo con la versión de depuración sin dañar la ubicación nueva
void *operator new(size_t size, int blockType, const char *filename, int linenumber);
y una macro se define como
#define DEBUG_NEW new(_NORMAL_BLOCK, __FILE__, __LINE__)
Ahora a instrumento todas las asignaciones, uno normalmente define
#if defined DEBUG_NEW
#define new DEBUG_NEW
#endif
Sin embargo, esta definición interrumpe cualquier lugar que utilice la ubicación nueva, porque los dos conjuntos de argumentos terminan siendo un error de sintaxis. Ahora puedo manejar fácilmente los pocos usos en nuestro código, pero la biblioteca estándar y la ubicación de uso de impulso nueva por todo el lugar. Definir esto globalmente significa incluir muchas cosas antes de la definición y eso ralentiza la compilación.
Entonces, ¿habría alguna forma de asignar instrumentos en nuestro código sin tener que colocar los encabezados simplemente porque contienen la ubicación nueva y sin tener que poner la última definición en todos los archivos o escribir DEBUG_NEW manualmente?
Encabezados precompilados sería realmente doloroso mantener en nuestra situación. Serían realmente grandes y complejos debido a diversos problemas de portabilidad (la base de código está compilada para 4 plataformas muy diferentes). –
¿De qué manera serían difíciles de mantener? El pch debe cambiar muy poco. –
Si incluye las cosas de impulso, cambiaría con bastante frecuencia. Pero quizás debería intentar precompilar solo este encabezado de depuración de memoria (que se inyecta con la opción del compilador '/ Fi'); la colocación nueva aparece en considerablemente menos lugares. –