A meno che lo dummy
non sia stato dichiarato nell'ambito dello spazio dei nomi, non è inizializzato e il suo valore non è specificato, vale a dire che può essere o meno null. Il richiamo di una funzione membro su un nullptr
o su un puntatore che punta a memoria non valida è comportamento non definito.
Potrebbero get away with the correct result se la funzione di membro si richiama non accede altri membri di dati della classe; in altre parole, se non dereferenzia il puntatore this
. Tuttavia, indipendentemente dal fatto che si ottenga o meno il risultato previsto, è comunque un comportamento non definito.
compilatori non sono tenuti a rilevare tali chiamate di funzione non validi. Se fai qualcosa di ovvio, come inizializzare un puntatore all'oggetto su nullptr
e quindi richiamare su di esso una funzione membro, potresti vedere una diagnostica dal compilatore, ma questo non è garantito.
E per rispondere a tutto il tuo futuro "non dovrebbe C++ dirmi che sto facendo qualcosa di sbagliato" domande in anticipo: no. C++ ottimizza pesantemente il caso in cui il tuo programma funziona, a scapito di dire quasi nulla sul caso in cui hai un bug. – user2357112