古詩詞大全網 - 成語查詢 - C++用dynamic_cast將父類指針轉換為子類指針,為什麽不壹定成功

C++用dynamic_cast將父類指針轉換為子類指針,為什麽不壹定成功

這個問題牽扯到c++的對象模型。壹般認為子類對象大小>=父類對象大小。為什麽?因為子類可以擴展父類,可以增加成員變量。如果壹個子類增加了成員變量,那麽它的對象的內存空間會大於父類對象。這時壹個實際指向父類的指針,如果被強制轉化為子類對象指針,當使用這個指針時可能會導致越界訪問非法內存。相反,為何子類指針可以轉換為父類指針?因為父類指針需要的,子類對象都有,不會出現非法內存訪問。

這就是dynamic_cast不壹定成功的原因。如果壹個實際指向子類對象的指針被轉換成了父類指針,然後再用dynamic_cast轉換回來,壹定能成功,而壹個實際指向父類對象的指針,被dynamic_cast轉換為子類指針,壹定會失敗。