Tengo dos punteros a los objetos y quiero probar si son exactamente el mismo objeto de la manera más robusta. No deseo invocar explícitamente ninguna sobrecarga de operator ==
y quiero que funcione sin importar las clases base, las clases base virtuales y la herencia múltiple.¿Qué se debe usar para verificar la identidad en C++?
Mi código actual es la siguiente:
((void*)a) == ((void*)b)
Y para mi caso esto funciona. Sin embargo, esto no funciona para este caso:
class B1 {};
class B2 {};
class C : public B1, public B2 {}
C c;
B1 *a = &c;
B2 *b = &c;
Subbing en reinterpert_cast
, static_cast
o dynamic_cast
no funciona bien.
Particularmente estoy esperando algo que termine realmente simple y eficiente. Idealmente, no requeriría ninguna instrucción de bifurcación para implementar y haría algo así como, ajustar el puntero al inicio del objeto y comparar.
El segundo caso no funciona porque los punteros son físicamente diferentes direcciones, cada una apuntando a un desplazamiento dentro del objeto derivado diferente clase base. Esto varía de compilador a compilador. –