一些背景優先:多級繼承和dynamic_cast
我正在研究一些實現UI接口的遺留代碼。代碼的構造方式是它有一個基類(實際上是一個結構體),然後將其導出到各種圖形對象。
WinBase:
- Button
- DialogWin
- (etc...)
- EditWin
勝基具有用來密切關注所有每個對象的孩子中的一員WinBase **children
。這些孩子在運行期間以標準的new []/delete []方式創建和銷燬。
這些對象的所有方法/函數都假定它們正在接收指向WinBase
對象的指針,並且dynamic_cast<>
用於確保/驗證是否正在使用適當的指針。
稍後改變到代碼增加了兩個類/結構(ListBox
和TextBox
)時,從EditWin
而這又是從WinBase
衍生而得。
所以...我有指向WinBase
,它被鑄造爲ListBox
和TextBox
。正如我所說,在整個代碼中都使用了dynamic_cast<>
,但我不確定在調用像這個構造函數這樣的函數時它有多安全。
如何安全是直接從WinBase
轉換爲ListBox
,反之亦然(例如)?
以什麼方式安全?如果運行時類型不允許轉換,dynamic_cast <>'將評估爲NULL指針。只要你檢查結果是非空的,你就很安全。如果這不是問題,那麼您確實需要提供更多細節,以及您特別困惑的代碼(以及以何種方式)。 – pmdj 2012-07-13 11:45:58
而不是返回0,如果我沒有弄錯,它會拋出一個'std :: bad_cast'異常。 – jogojapan 2012-07-13 11:48:22
@jogojapan如果使用指針,總是返回0。 – ForEveR 2012-07-13 11:49:24