c++ – 標準容器可以繼承嗎
阿新 • • 發佈:2019-01-29
C++ 標準提供了不少容器類,這些為C++的應用提供了很大的便利。但是,總有些時候這些標準容器提供的功能不能完全滿足需求,於是就有人從標準容器上繼承出了自己的類。
那麼,標準容器可以用作基類嗎?
先說結論吧,不推薦,不要用。
為什麼呢?
標準中所用的容器類都沒有虛的解構函式。
沒有虛析構就意味著這些類並不準備被用於繼承。因為當基類沒有虛析構的時候,子類的物件有可能不能被正確的析構。比如說,將子類的指標轉換為基類的指標,在對基類指標呼叫 delete 的時候,如果基類的解構函式不是虛的,那麼子類的解構函式將不會被呼叫。這是不推薦將標準容器作為基類的最主要的原因。
可是我真的想擴充標準容器的功能啊?
兩個方案:
1. 對於基於標準容器的演算法,可以不基於某一種容器擴充套件,而是寫成接受 iterator 的演算法。
這個在 <algorithm>
<algorithm>
你可能就已經發現你想擴充的演算法了)簡單的增加一個演算法都可以使用這種方案。 基於
iterator
的演算法具有通用性,可以不只應用與某一個容器,複用性好,何樂而不為呢。 2. 將標準容器作為類成員。
如果你的類需要一些額外的資料成員,那這就是一個比較好的方案了。