我檢討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