2010-09-18 13 views
5

siempre pensé ...new/delete "anular" frente a "sobrecarga"

  • anulando medios reimplementar una función (la misma firma) en una clase base, mientras que
  • sobrecarga significa implementar una función con el mismo nombre pero diferente firma

... y se confundió porque a veces las personas simplemente no se preocupan por la diferencia.

Relativo a new/delete: ¿Están sobrecargados o anulados?

Una idea:

  • la implementación de nuevos/borrar operador en una clase = sobrecarga
  • reimplementar/Delete = anular

las correcciones/sugerencias/objeciones nuevos globales? Y no dude en marcar la pregunta "sutilezas" ...

Respuesta

7

Por lo global y operator newoperator delete, en realidad ni sobrecargas ni primordial. Se permite que un programa reemplace las definiciones predeterminadas proporcionadas por la implementación con sus propias definiciones. El estándar C++ dice (§3.7.3/2):

La biblioteca proporciona definiciones predeterminadas para las funciones globales de asignación y desasignación. Algunas funciones globales de asignación y desasignación son reemplazables (18.4.1). Un programa C++ debe proporcionar como máximo una definición de una función reemplazable de atribución o desasignación. Cualquier definición de función de este tipo sustituye a la versión predeterminada proporcionada en la biblioteca (17.4.3.4).

Para una clase específica operator new o operator delete, los operadores están sobrecargados.

+0

Así que la sobrecarga y la anulación son igualmente incorrectas aquí, lo que explica la distribución 50-50 en uso :-) –

+0

James: Aunque creo que lo que escribiste es correcto, aún puedes sobrecargar ambos operadores globales con los que toman adicionales (o diferentes)) argumentos. De hecho, std lib viene con al menos sobrecargas: una ubicación nueva y la variante 'nothrow'. – sbi

+1

@sbi: Correcto. Bueno, los operadores globales están sobrecargados y cada una de las sobrecargas puede ser reemplazada. @ spc-mrn: Sí, efectivamente. –