Вопрос

Я делаю 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 и объект другого типа указывает на ошибку программирования, тогда утверждение имеет смысл, по крайней мере, в отладочных сборках.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top