This MSDN page menciona que no hay versiones de new
y delete
. nothrow new
es algo bastante conocido: devuelve nulo en lugar de lanzar una excepción si falla la asignación de memoria. Pero, ¿qué es nothrow delete
mencionado allí?¿Qué es nothrow delete in C++?
Respuesta
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.
- 1. ¿Por qué el compilador requiere `delete [] p` versus` delete p [] `?
- 2. ¿Cómo invoco la versión de eliminación de nothrow?
- 3. Secure File Delete en C
- 4. Por qué "delete [] [] ... multiDimensionalArray;" el operador en C++ no existe
- 5. ¿Es string.Length in C# (.NET) variable instantánea?
- 6. ¿Qué es más eficiente StringBuffer new() o delete (0, sb.length())?
- 7. ¿Por qué incluso necesitamos el operador "delete []"?
- 8. ¿Cuándo se debería usar std :: nothrow?
- 9. C++ delete tabla de sintaxis del operador
- 10. Math.Cos & Math.Sin in C#
- 11. operador nuevo con la opción nothrow todavía lanza excepción
- 12. BigInteger in C?
- 13. ToggleButton in C# WinForms
- 14. sleep-until in C#
- 15. Environment.CurrentDirectory in C# .NET
- 16. Skype Addon in C#
- 17. ¿Qué determina qué se escribe en un puntero de C++ cuando se llama a delete?
- 18. Linq to Entities delete
- 19. ¿Con qué frecuencia debo usar try and catch in C#?
- 20. Dilema: Cascade delete or Join delete
- 21. ¿Qué es lo opuesto a `fixed` in cout?
- 22. ¿Qué es lo opuesto a Array # reject in ruby?
- 23. ¿Qué es in-place/Out-of-place builds
- 24. Para un proyecto lein, ¿por qué es lib/in .gitignore?
- 25. Javascript ¿por qué FOR IN es una mala práctica?
- 26. ¿Qué es g ++ 's -pthread equiv in clang?
- 27. No es necesario usar escape seq. para 'in C#?
- 28. ¿Por qué utilizar malloc/free, cuando tenemos new/delete?
- 29. ¿Qué significa! Function in Javascript?
- 30. C++ Pixels In Console Window