Может случиться так, что тип similarObject
перегружен operator*
, и поэтому он возвращает что-то, чей адрес вы передаете dynamic_cast
.
&(*x)
и x
не могут всегда быть одним и тем же. Например, подумайте об итераторе:
std::map<int, int>::iterator it = v.begin();
Тогда it
и &(*it)
- это две разные вещи:
- Тип
it
равен std::map<int, int>::iterator
- Тип
&(*it)
равен std::pair<int,int>*
Они не вообще одинаковы. Аналогичная вещь может произойти и с вашим фрагментом кода.