{C++ 基础} {C++ 高级} {C#界面,C++核心算法} {设计模式} {C#基础}
posted on 2008-02-19 10:08 梦在天涯 阅读(13117) 评论(6) 编辑 收藏 引用 所属分类: CPlusPlus
貌似不管啥时候用dynamic_cast都要安全一些啊 回复 更多评论
效率上有差别啊 回复 更多评论
dynamic_cast依赖虚函数并且会造成运行时的效率缺失 static_cast不依赖虚函数 回复 更多评论
在实际的项目当中,可以自己实现dynamic_cast的运行时安全,并且更具有效率的转换方法。com也能一种。 回复 更多评论
上面的我调试过,不能在VC6.0中调试通过的,要进行project设置的(具体设置可以加我QQ联系,注明dynamic) 而且这个程序是不安全的,new了一个pD,却没有释放它,要么采用“test(Base *pD)的书写形式,要么最后加上“delete pD"操作。 而且对于你”error code“里面的东西调试发现,是可以通过的,只是这时的PD3获得的是一个base类型的指针,或者说pd3初始化为一个point to(指向)base的指针,所以这时pd3对base的f 和 f1 的调用是成功的(返回当然是base::f 与 base::f1了)。只是在调用K时失败。 个人理解:动态转换其实是一个类家族的安全检查和公共界面问题,上面例子知道了一个类的父类的时候,看上去没有什么用,你把dynamic和base *都去掉,直接new derived ,结果还是一样的。有时在不知道父类时或者不确定你的类是否是父类的override时,你在想用这种公共界面,为了类型安全(也就是确定他们是一个家族中的类),就要用到这种强制转换 说的不好的,望大家指出,一起讨论 回复 更多评论
没有必须使用dynamic_cast的时候,Base1 *pB1 = static_cast<Base1*>(static_cast<Derived1*>(pD)); 回复 更多评论