ExpertiDict

C++ · Avançado · Português · Técnico

garantias de exceção

ɡaɾɐ̃ˈtʃiɐz dʒi ejseˈsɐ̃wlocução nominal

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

Veja também

Todos os termos de C++