简单检查dynamic_cast c++

simple check for dynamic_cast c++

本文关键字:cast c++ dynamic 检查 简单      更新时间:2023-10-16

我做了一个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
}

这样行吗?还是我需要使用assert ?我只关心这个特定的函数。我还需要使用其他的支票吗?

它会通过代码审查吗?

检查dynamic_cast的结果保护代码不做错误的事情。assert保护程序不被程序员写错。

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