Sobrecarga del operador global nuevo / eliminar en C ++
-
11-07-2019 - |
Pregunta
Estoy intentando sobrecargar el operador global nuevo y eliminarlo 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 utilizar el asignador de Intel TBB http://www.intel.com/technology/itj/2007/v11i4/5-foundations/5-memory.htm
Como estoy sobrecargando nuevo y eliminar 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 " new " 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 lo más independiente posible. ¿Todos los compiladores admiten algo análogo a " gcc -include " ;?
Solución
Si desea sobrecargar el operador global new
y operator delete
, solo necesita implementarlo. No es necesario que lo defina explícitamente en todas partes, ya que ya está definido como parte del lenguaje.
Editar: si desea definir un operador nuevo que tome diferentes parámetros, deberá # incluirlo en todas partes. Como sea que hagas eso depende de ti; es sobre todo una cuestión de estilo.
Y no olvide implementar todas las variantes del operador global new y delete: new
, new []
, delete
, < code> delete [] , y las variantes std :: nothrow
.
Otros consejos
Si está utilizando Visual Studio y está usando encabezados precompilados, puede incluir la inclusión allí. Creo que gcc también tiene algún tipo de encabezado de precompilación, que también mejoraría los tiempos de compilación.