Ho due puntatori agli oggetti e voglio verificare se sono esattamente lo stesso oggetto nel modo più affidabile. Non desidero esplicitamente richiamare alcun sovraccarico di operator ==
e voglio che funzioni, a prescindere dalle classi di base, dalle classi di base virtuali e dall'ereditarietà multipla.Che cosa dovrebbe essere usato per verificare l'identità in C++?
mio codice attuale è questo:
((void*)a) == ((void*)b)
E per il mio caso questo funziona. Tuttavia, questo non funziona per questo caso:
class B1 {};
class B2 {};
class C : public B1, public B2 {}
C c;
B1 *a = &c;
B2 *b = &c;
sottostrato in reinterpert_cast
, static_cast
o dynamic_cast
non funziona neanche.
In particolare, spero in qualcosa che risulti davvero semplice ed efficiente. Idealmente non richiederebbe istruzioni di ramificazione da implementare e farebbe qualcosa di simile, aggiustando il puntatore all'inizio dell'oggetto e confrontandolo.
Il secondo caso non funziona perché i puntatori sono fisicamente diversi indirizzi, ognuno punta a compensare all'interno dell'oggetto derivato una diversa classe di base. Questo varia dal compilatore al compilatore. –