從C STL 容器派生的潛在陷阱
從C 標準庫(STL) 容器派生的實踐一直是爭論,一些人反對使用它。儘管有明顯的優勢,例如重載函數和實現專業化,但這種方法仍然存在潛在風險。
STL 容器中缺乏虛擬析構函數會帶來重大危險。當從缺少虛擬析構函數的 STL 容器衍生類別時,衍生類別可能無法正確處理多態行為。這可能會導致意外結果,尤其是當派生類別的物件儲存在容器中並透過基類指標存取時。
為了說明這一點,請考慮以下場景:
在此範例中,kill_it 函數對派生類別 Charges 沒有任何了解。因此,它將呼叫基底類別 std::vector
從 STL 容器衍生的另一個潛在問題來自 Microsoft 對向量類別的實作。在該實作中,向量類別本身是透過繼承來實現的,其中向量公開源自 _Vector_Val。這在使用衍生類別時增加了額外的複雜性和潛在危險。
雖然在某些情況下使用繼承可能有優勢,但好處通常伴隨著複雜性和潛在風險的增加。為了清晰起見並避免與衍生相關的潛在問題,通常首選使用容器作為成員變數而不是基底類別的組合。
以上是您應該繼承 C STL 容器嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!