Questo è apparso come parte di una revisione del codice per un segmento di codice simile a questo:
auto somePikachu = GetMeAPikachu();
NT_ASSERT(somePikachu != nullptr); // this only fires on debug build
somePikachu->ThunderBolt();
A mio parere l'assert è ridondante poiché se somePikachu
è null
si bloccherà comunque nella riga successiva quando tenta di chiamare Thunderbolt
. (Ovviamente se ThunderBolt
non richiede il dereferenziamento di questo puntatore non succederà nulla sulla versione di rilascio). Quindi l'affermazione non sta comprando nulla IMHO.
C'è un'altra scuola di pensiero che è dell'opinione che l'affermazione aggiunge valore alla leggibilità e rende chiaro l'intento del progetto.
Mi piacerebbe avere l'opinione della comunità sul modello corretto di affermare il design per la validità dei puntatori.
Sentitevi liberi di includere altri possibili scenari che corrispondono alla dichiarazione del problema.