2009-12-25 10 views

Respuesta

18

Probablemente se están refiriendo a las funciones de asignación de memoria bruta operator new y operator delete.

Cuando se invoca una versión específica de la colocación de nueva expresión (es decir, de nueva expresión con parámetros adicionales, todos ellos se conocen oficialmente como colocación formas de new) y la función de asignación de memoria operator new tiene éxito, pero falla el proceso de más tarde por algún otro motivo (el constructor arroja), la implementación debe abortar el proceso y liberar automáticamente la memoria asignada llamando a la versión apropiada de operator delete. La "versión adecuada" de operator delete en este caso es la versión que tiene el mismo conjunto de parámetros que la función operator new utilizada anteriormente para la asignación de memoria (excepto el primer parámetro, por supuesto).

Esto se aplica a la versión nothrow de operator new también. Cuando utiliza una forma nothrow de nueva expresión, llama a una versión nothrow de operator new y luego construye el objeto en la memoria asignada. Si el constructor falla (arroja), la implementación de la nueva expresión libera memoria asignada con la ayuda de nothrow versión de operator delete. Esta es básicamente la única razón para que exista esta versión de operator delete.

En otras palabras, la versión nothrow de operator delete existe para fines internos muy específicos. Normalmente no debería querer llamarlo usted mismo y, tal vez, realmente no necesite saber acerca de su existencia. Sin embargo, vale la pena saber que, por los motivos descritos anteriormente, cada vez que cree su propia versión de operator new con parámetros adicionales, siempre es una buena idea proporcionar una versión correspondiente de operator delete con el mismo conjunto de parámetros adicionales.

Cuestiones relacionadas