2009-03-12 28 views
8

Estoy tratando de sobrecargar el operador global nuevo y eliminar para una aplicación sensible al rendimiento. He leído las inquietudes descritas en http://www.informit.com/articles/article.aspx?p=30642&seqNum=3 y las recomendaciones para usar el asignador de Intel TBB http://www.intel.com/technology/itj/2007/v11i4/5-foundations/5-memory.htmSobrecarga global operador nuevo/eliminar en C++

Como estoy sobrecargando nuevas y borrando por primera vez, tengo algunas preguntas.

¿Debo incluir mi nuevo encabezado Allocator.h (o Pre.h) que contiene la nueva función sobrecargada en todos los archivos que contienen "nuevas" llamadas? Esto es tedioso

¿O debería usar "gcc -include Allocator.h ..." que incluye Allocator.h (antes) en cada unidad de traducción? Quiero mantener la plataforma de código independiente tanto como sea posible. ¿Todos los compiladores admiten algo análogo a "gcc -include"?

Respuesta

14

Si desea sobrecargar el global operator new y operator delete, solo tiene que implementarlo. No necesita definirlo explícitamente en todas partes ya que ya está definido como parte del lenguaje.

Editar: Si quiere definir un operador nuevo que tome diferentes parámetros, necesitará #incluirlo en todas partes. Como sea que lo haga, eso depende de usted; es sobre todo una cuestión de estilo.

Y no se olvide de poner en práctica todas las variantes de operador global nuevo y eliminar: new, new[], delete, delete[], y las variantes std::nothrow.

2

Si usa Visual Studio y usa encabezados precompilados, puede lanzar el include allí. Creo que gcc también tiene algún tipo de encabezados de precompilación, lo que también mejoraría los tiempos de compilación.