Перед чтением вопроса:
Этот вопрос не о том, насколько полезно использовать dynamic_cast
. Дело в производительности.
Недавно я разработал дизайн, в котором часто используется dynamic_cast
.
Обсуждая это с коллегами, почти все говорят, что dynamic_cast
не следует использовать из-за его плохой производительности (это сотрудники, которые имеют разный опыт и в некоторых случаях не знают друг друга. Я ». м работаю в огромной компании)
Я решил проверить работоспособность этого метода вместо того, чтобы просто им поверить.
Был использован следующий код:
ptime firstValue( microsec_clock::local_time() );
ChildObject* castedObject = dynamic_cast<ChildObject*>(parentObject);
ptime secondValue( microsec_clock::local_time() );
time_duration diff = secondValue - firstValue;
std::cout << "Cast1 lasts:\t" << diff.fractional_seconds() << " microsec" << std::endl;
В приведенном выше коде используются методы из boost :: date_time
в Linux для получения полезных значений.
Я сделал 3 dynamic_cast
за одно выполнение, код для их измерения такой же.
Результаты 1 выполнения были следующими:
Cast1 длится: 74 мкс
Cast2 длится: 2 мкс
Cast3 длится: 1 микросекунда
Первое приведение всегда занимало 74–111 микросекунды, последующие приведения в том же исполнении занимали 1-3 микросекунды.
Итак, наконец, мои вопросы:
dynamic_cast
действительно плохо работает?
По результатам тестов его нет. Мой тестовый код правильный?
Почему так много разработчиков думают, что это медленно, если это не так?