我做了一个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
}
这样很好还是我需要使用断言? 我所关心的只是那个特殊的功能。我还应该使用其他支票吗?
是否会通过代码审核?
答案 0 :(得分:6)
检查dynamic_cast
的结果是否可以保护代码不正确。断言保护程序免受程序员错误编写。
是否应该断言取决于对象是否属于dynamic_cast
的目标类型是错误的。如果进入此代码,您希望混合对象,其中一些对象是A
,而其中一些对象不是A
,那么断言将触发合法使用。如果此时的每个对象都应该是{{1}}类型,并且不属于该类型的对象表示编程错误,那么断言是有意义的,至少在调试版本中是这样。