質問を読む前に:
この質問は、を使用することがどれほど役立つかについてではありません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上のメソッドを使用して、使用可能な値を取得します。
1回の実行で3dynamic_cast
回実行しましたが、それらを測定するためのコードは同じです。
1回の実行の結果は次のとおりです
。Cast1の持続時間:74マイクロ秒
Cast2の持続時間:2マイクロ秒
Cast3の持続時間:1マイクロ秒
最初のキャストは常に74〜111マイクロ秒かかり、同じ実行での次のキャストは1〜3マイクロ秒かかりました。
それで最後に私の質問:
本当にdynamic_cast
パフォーマンスが悪いのですか?
テスト結果によると、そうではありません。私のテストコードは正しいですか?
なぜそんなに多くの開発者がそうでなければ遅いと思うのですか?