Разница между & (* 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-значением.