我检讨C++蒙上运营商,我有以下疑问:的static_cast时,基地不变成多态多形性
多态类
- II应该使用
polymorphic_cast
- 我应该从不使用
static_cast
,因为向下投射可能会导致未定义的行为。代码无论如何编译这个案例。
现在假设我有以下situtation
class CBase{};
class CDerived : public CBase{};
int main(int argc, char** argv){
CBase* p = new CDerived();
//.. do something
CDerived*pd = static_cast<CDerived*>(p);
}
由于没有多态性参与我不会用polymorphic_cast
和代码甚至不会编译。
如果在某些时候,某人在继承树中引入了一些virtual
函数,我现在意识到了这一点,所以我处于危险之中:我怎么能意识到这一点?
我应该搬到polymorphic_cast
以避免任何风险,但代码仍然会在没有任何通知的情况下编译。
你怎么做才能认识到这种变化或防止这些情况?
由于 AFG
*并且代码甚至不会编译* - 你的意思是*并且代码会编译好*? – 2010-10-25 08:38:59
不应该为CBase“析构”虚拟吗?在这种情况下,你可以使用'dynamic_cast'或'polymorphic_cast'。 – Naveen 2010-10-25 08:40:30
在标准C++中没有'polymorphic_cast'这样的东西。为什么不首先使用'CDerived'?或者如果你认为你必须使用动态分配,为什么不使用'CDerived *'?虚拟功能即使在不知情的情况下也不会造成任何危险。那些类名称上的所有这些“C”前缀是什么?这听起来像是一个严重的口吃我的情况。干杯, – 2010-10-25 08:46:22