從 C STL 容器繼承的風險
提出的問題是從標準 C 容器繼承是否有任何真正的風險。作者認為使用 typedef,例如 typedef std::vector
用例
考慮以下程式碼片段:
#include <vector> #include <iostream> void kill_it(std::vector<double>& victim) { delete &victim; } typedef std::vector<double> Rates; class Charges: public std::vector<double> { }; int main() { std::vector<double>* p1, *p2; p1 = new Rates; p2 = new Charges; kill_it(p2); kill_it(p1); return 0; }
作者建議,任意不幸的使用者可能會在 ??? 中引入錯誤。部分會導致 Charges(衍生類別)出現問題,但不會導致 Rates(typedef)出現問題。
虛擬析構函數
這裡的關鍵問題是標準C 容器沒有虛擬析構函數。因此,您無法以多型方式處理它們。如果您和程式碼的所有使用者都遵守這項原則,那麼從標準容器繼承並不是本質上錯誤的。不過,為了清晰起見,作者建議組合。
組合優於繼承
使用組合比從容器繼承更乾淨、更安全。這涉及創建一個新類,其中包含容器的實例作為成員變數。這允許對類別的功能具有更大的靈活性和控制力。
在此用例中,例如,定義一個包含 std::vector
以上是從C STL容器繼承有風險嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!