Mam dwa wskaźniki do obiektów i chcę przetestować, czy są one dokładnie tym samym obiektem w najbardziej niezawodny sposób. Nie chcę wyraźnie wywoływać przeciążenia operator ==
i chcę, aby działał bez względu na to, które klasy bazowe, wirtualne klasy bazowe i wiele dziedziczenia są używane.Co powinno być używane do sprawdzania tożsamości w C++?
Mój obecny kod jest taka:
((void*)a) == ((void*)b)
I moim przypadku działa to. Jednak, że nie działa w tym przypadku:
class B1 {};
class B2 {};
class C : public B1, public B2 {}
C c;
B1 *a = &c;
B2 *b = &c;
zastępczą w reinterpert_cast
, static_cast
lub dynamic_cast
nie działa albo.
Szczególnie mam nadzieję na coś, co kończy się naprawdę proste i skuteczne. Idealnie byłoby nie wymagać żadnych instrukcji rozgałęzień, które mogłyby zaimplementować i zrobiłyby coś takiego, dostosuj wskaźnik do początku obiektu i porównaj.
Drugi przypadek nie działa, ponieważ wskaźniki są fizycznie różne adresy, każdy wskazujący na innej klasy bazowej przesunięcia wewnątrz obiektu pochodzi. Różni się to od kompilatora do kompilatora. –