Excepción de seguridad


Las garantías de seguridad de excepciones son un conjunto de pautas contractuales que los implementadores de bibliotecas y los clientes pueden usar al razonar sobre la corrección del manejo de excepciones . Las garantías presentadas aquí se originaron a partir del trabajo en C++ , pero se aplican igualmente a otros lenguajes y mecanismos de manejo de errores. [1]

Como escribe David Abrahams , "nadie habló nunca de 'seguridad de errores' antes de que C++ tuviera excepciones". [2] El término apareció como tema de publicaciones en JTC1/SC22/WG21 , el comité estándar de C++, ya en 1994. [3] La seguridad de excepción para la biblioteca estándar fue formalizada por primera vez para STLport por Abrahams, estableciendo la seguridad básica/ fuerte distinción de seguridad. [4] Esto se amplió a las modernas garantías básicas/fuertes/no-throw en una propuesta posterior. [5]

La biblioteca estándar de C++ proporciona varios niveles de seguridad de excepción (en orden decreciente de seguridad): [6]

Por lo general, se requiere al menos seguridad de excepción básica para escribir código robusto. Los niveles más altos de seguridad a veces pueden ser difíciles de lograr y pueden incurrir en gastos generales debido al copiado adicional. Un mecanismo clave para la seguridad de excepciones es una finallycláusula, o una sintaxis de manejo de excepciones similar , que garantiza que cierto código siempre se ejecute cuando se sale de un bloque, incluso por excepciones. Varios lenguajes tienen construcciones que simplifican esto, en particular usando el patrón de eliminación , denominado como using, witho try-con-recursos.

Considere un tipo de vector inteligente, como C++ o Java . Cuando se agrega un elemento a un vector , el vector debe agregarse a la lista interna de objetos y actualizar un campo de conteo que dice cuántos objetos hay . También es posible que deba asignar nueva memoria si la capacidad existente no es suficiente.std::vectorArrayListxvxv