Перед тем, как прочитать вопрос:
Этот вопрос не о том, насколько полезно использовать 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
плохо работает?
По результатам теста его нет. Правильно ли мой тестовый код?
Почему многие разработчики считают, что это медленный, если это не так?