Eu estava querendo encontrar uma resposta sólida para a questão de ter ou não verificações em tempo de execução para validar as entradas com o objetivo de garantir que um cliente permaneça no final do contrato, conforme o design por contrato. Por exemplo, considere um construtor de classe simples:
class Foo
{
public:
Foo( BarHandle bar )
{
FooHandle handle = GetFooHandle( bar );
if( handle == NULL ) {
throw std::exception( "invalid FooHandle" );
}
}
};
Eu argumentaria neste caso que um usuário não deve tentar construir um Foosem um válido BarHandle. Não parece correto verificar se baré válido dentro do Fooconstrutor. Se eu simplesmente documentar que Fooo construtor requer um válido BarHandle , não é suficiente? Essa é uma maneira adequada de impor minha pré-condição no projeto por contrato?
Até agora, tudo o que li tem opiniões contraditórias sobre isso. Parece que 50% das pessoas diriam para verificar se baré válido, os outros 50% diriam que eu não deveria fazê-lo, por exemplo, considere um caso em que o usuário verifique se BarHandleestá correto, mas uma segunda verificação (e desnecessária) também está sendo feito dentro do Fooconstrutor.