Разница между & (* SimilarObject) и аналогичным объектом? Разве они не такие?
Может кто-нибудь объяснить это мне?
dynamic_cast<SomeObject *>( &(*similarObject) );
Какой смысл делать адрес разыменованного указателя? Не мог бы сам указатель быть его адресом?
Ответ 1
Может быть, тип 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>*
Они совсем не такие. Подобное может случиться и с вашим фрагментом кода.
Ответ 2
Если подобный Object является умным указателем, этот метод иногда используется для получения ссылки на необработанный указатель, когда * был перегружен.
Ответ 3
Никто еще не сказал, что similarObject является lvalue, тогда как &*similarObject является r-значением.