Любая причина не использовать адрес dynamic_cast для ссылки? - PullRequest
0 голосов
/ 30 декабря 2011

Есть ли основания против использования Foo* foo = &dynamic_cast<Foo&>(*ptrFoobase);? Я хочу, чтобы он генерировал bad_cast, если приведение неверно, и сохраняет дополнительную проверку указателя на ноль.

Ответы [ 2 ]

3 голосов
/ 30 декабря 2011

Не существует строгой универсальной причины, по которой вам не следует этого делать, но это некрасиво и трудно читать.

Если вы решили, что выбрасывать исключение - это правильно,вам, вероятно, следует пересмотреть другие варианты дизайна: зачем вам вообще нужен указатель?Если вы придерживаетесь ссылок, проблем нет: Foo & foo = dynamic_cast<Foo&>(fooBaseRef);.

Лично я бы сказал, что если у вас есть голые указатели в C ++, у вас какое-то устаревшее мышление, поэтому вам, вероятно, следует простодобавить нуль-проверку и бросить вручную.С другой стороны, если вы хотите использовать идиоматический современный C ++, предпочитайте ссылки полностью, и вы получите свое исключение бесплатно.

1 голос
/ 30 декабря 2011

Не будет работать, если ptrFoobase может быть нулевым.

...