простая проверка на Dynamic_cast С++
-
21-12-2019 - |
Вопрос
Я делаю Dynamic_cast и хочу проверить, успешно ли выполнено приведение.
Сейчас я выполняю базовую проверку нулевого указателя.Это так:
A *temp_ptr = dynamic_cast<A *>(obj_ptr);
if( (temp_ptr) && (temp_ptr->some_function()))
{
// do something if the function returns true
}
else
{
// cast failed or function returns false
// continue with normal execution
}
Это нормально или мне нужно использовать Assert?Меня волнует только эта конкретная функция.Есть ли другая проверка, которую мне следует использовать?
Пройдёт ли он проверку кода?
Решение
Проверка результатов dynamic_cast
защитить код от неправильных действий.Утверждение защищает программу от неправильного написания программистами.
Следует ли вам утверждать, зависит от того, является ли ошибкой то, что объект не принадлежит к целевому типу вашего dynamic_cast
.Если вы войдете в этот код, вы ожидаете смесь объектов, некоторые из которых относятся к типу, а некоторые нет. A
, то утверждение будет срабатывать для законного использования.Если ожидается, что каждый объект в этот момент будет иметь тип A
и объект другого типа указывает на ошибку программирования, тогда утверждение имеет смысл, по крайней мере, в отладочных сборках.