其他分享
首页 > 其他分享> > c – 同一类型的Dynamic_cast对象

c – 同一类型的Dynamic_cast对象

作者:互联网

参见英文答案 > How is the deletion of a pointer detected using dynamic cast                                    1个
我正在研究一些遗留代码,它们有这样的几行:

try
{
    object = dynamic_cast< Object* >( _object );
}

_object已经是一个开始的Object *.如果_object已被释放,代码中有关于试图避免崩溃的注释.我的问题是,如果有的话,这是如何工作的?如果开始和结束类型相同,dynamic_cast仍会执行某些操作吗?

还有另一个地方,他们正在做同样的dynamic_cast但它不在try块中.是否有任何指向动态转换为相同的确切类型或可能只是“坏”代码?

解决方法:

My question is, how does this work, if it does?

它没有,至少没有任何明确定义的方式.尝试使用被破坏的非平凡对象执行任何操作会产生未定义的行为.

在某些特定实现中,如果对象被销毁,则转换可能会干净地失败.但它可能会崩溃或订购披萨.

在使用之前有多种方法可以确保对象有效 – 例如智能指针或结​​构良好的范围 – 但是测试对象本身(无论是通过RTTI还是用户声明的成员数据)都不起作用,因为对象可以’破坏后安全访问.

Does dynamic_cast still do something if the start and end types are the same?

它可能什么也不做,因为它可以假设指针是有效的,因此转换将成功.或者它可能会进行运行时类型检查,如果指针有效则会成功,否则会给出未定义的行为.

Could there be any point to a dynamic cast to the same exact type or is that likely just “bad” code?

不,没有意义.指针已经指向正确类型的有效对象,在这种情况下你可以使用它;或者它没有,在这种情况下,dynamic_cast是未定义的.

标签:dynamic-cast,c
来源: https://codeday.me/bug/20190824/1710024.html