Considera la seguente parte di codice
class Foo
{
public:
//...
bool valueFirstGet(int& value) const
{
if(this==nullptr)
{return 0;}
value=values[0];
return 1;
}
//...
private:
int* values;
size_t n_values;
};
int main()
{
Foo* obj=findObject("key");
int value;
if(!obj->valueFirstGet(value))
{printf("key does not exist\n");}
return 0;
}
findObject restituisce nullptr se non riesce a trovare l'oggetto. Va bene lasciare che la funzione membro esegua il controllo nullo invece del suo chiamante. Nel mio codice ci sono diverse chiamate a findObject direttamente seguito da una chiamata a valueFirstGet, quindi lasciare il controllo al chiamante rende il codice brutto.
EDIT:
Esiste un modo più semplice per evitare tutti i controlli nulli, oltre al fatto che findObject genera un'eccezione invece di restituire null?
EDIT 2:
Che dire di un wrapper statico?