避免從C std::string 類別繼承的原因
在《Effective C》中,避免從std::string 繼承的建議是基於它缺乏虛擬析構函數並且不適合作為基類,即使對於多態目的也是如此。了解類別作為基底類別的具體要求以及從 std::string 派生的後果進一步闡明了這一立場。
基類繼承的資格
C 中的繼承性與多態行為的需求緊密結合。僅當打算透過指標或引用存取類別時才應使用公共繼承,從而允許動態綁定。否則,自由函數或組合是程式碼重用的首選機制。
std::string 作為基底類別
對於 std::string,缺少虛擬析構函數會導致它無法有效支援多態行為。此外,其內部設計並不打算用作基類。
從 std::string 派生的問題
從 std::string 派生會引入潛在問題由於 C 中的切片行為。例如,如果函數需要 std::string 參數,則傳遞派生物件將導致截斷的副本,其中排除派生類別的其他成員。這可能會導致不一致和未定義的行為。
防止非多態性基類使用
防止客戶端純粹為了可重用而使用基類,就好像它是一個多態性基類,可以採用以下技術使用:
以上是為什麼應該避免從 C std::string 類別繼承?的詳細內容。更多資訊請關注PHP中文網其他相關文章!