这个问题不涉及使用
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;
上述代码使用Linux下的
boost::date_time
方法来获取可用值。我在一次执行中进行了3个
dynamic_cast
,测量它们的代码相同。1次执行的结果如下:
Cast1持续时间:74微秒
Cast2持续时间:2微秒
Cast3持续时间:1微秒
第一个转换始终需要74-111微秒,在同一次执行中的后续转换需要1-3微秒。
所以最后我的问题是:
dynamic_cast
真的表现不佳吗?根据测试结果并非如此。我的测试代码正确吗?为什么这么多开发人员认为它很慢,而实际上并不是呢?