在阅读问题之前:
这个问题不是关于使用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 上的方法来获取可用值。
我dynamic_cast
一次执行了 3 次,测量它们的代码是相同的。
1 次执行的结果如下:
Cast1 持续时间:74 微秒
Cast2 持续时间:2 微秒
Cast3 持续时间:1 微秒
第一次施法总是花费 74-111 微秒,同一执行中的以下施法花费 1-3 微秒。
所以最后我的问题是:
真的dynamic_cast
表现不好吗?
根据测试结果它不是。我的测试代码正确吗?
为什么这么多开发人员认为如果不是,它就很慢?