C++ · Avançado · Português · Técnico
garantias de exceção
Níveis de segurança que uma operação oferece quando lança exceção: nenhuma, básica (sem vazar, invariantes mantidas), forte (estado original restaurado) e nothrow (nunca lança).
Onde usar
Em code review, discute-se qual nível uma função de modificação oferece. A garantia forte costuma ser obtida preparando o novo estado à parte e trocando no final com um swap sem exceções.
Em código
void Lista::adiciona(const std::string& s) {
auto copia = itens_; // trabalha na cópia
copia.push_back(s); // pode lançar
itens_.swap(copia); // nothrow: confirma
}Exemplos
Essa função só oferece a garantia básica; precisamos da garantia forte aqui.
Para ter a garantia forte, trabalhe numa cópia e troque no final com swap.
Cuidado
Garantia básica não significa que o estado não mudou: significa apenas que nada vaza e o objeto continua válido.
Sinônimos
exception safety