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