简单检查dynamic_cast c ++

时间:2014-06-03 17:28:57

标签: c++ pointers dynamic-cast typecasting-operator

我做了一个dynamic_cast并想检查演员是否成功。

我正在做一个基本的空指针检查。它是这样的:

A *temp_ptr = dynamic_cast<A *>(obj_ptr);
if( (temp_ptr) && (temp_ptr->some_function()))
{
      // do something if the function returns true
}
else
{
      // cast failed or function returns false
      // continue with normal execution
}

这样很好还是我需要使用断言? 我所关心的只是那个特殊的功能。我还应该使用其他支票吗?

是否会通过代码审核?

1 个答案:

答案 0 :(得分:6)

检查dynamic_cast的结果是否可以保护代码不正确。断言保护程序免受程序员错误编写。

是否应该断言取决于对象是否属于dynamic_cast的目标类型是错误的。如果进入此代码,您希望混合对象,其中一些对象是A,而其中一些对象不是A,那么断言将触发合法使用。如果此时的每个对象都应该是{{1}}类型,并且不属于该类型的对象表示编程错误,那么断言是有意义的,至少在调试版本中是这样。