2013-04-24 132 views
6

在這裏有很多答案,說不從std :: vector繼承,如this question。我瞭解原因並同意他們。然而在here第4.4.1.2節Bjarne Stroustrup自己從std :: vector繼承來添加範圍檢查。繼承std :: vector

那是那是在這方面或某事,他真的不應該做的不錯的特殊情況,或只是一些:P

+9

Bjarne Stroustrup是一個特例。 – Chowlett 2013-04-24 09:25:05

+0

我認爲這是展示他所描述的原理的最簡單方式,而不必設置複雜的示例類。 – 2013-04-24 09:27:44

回答

3

我覺得this answer完全回答你的問題。

std::vector繼承它不是不可能的,它可能會非常有限(由於沒有虛擬析構函數),對其他人來說相當混亂,並且通過構造擴展會比繼承更好/更容易/更易維護。

也許Stroustrup只是想表明它是可行的,但不一定暗示他建議。

+0

這是有道理的,你根本不可能使用矢量多態的無論如何.. – jcoder 2013-04-24 09:30:31

+1

你的意思是[這個答案](http://stackoverflow.com/a/7302165/743214),不是嗎? – 2013-04-24 09:34:47

+2

@jcoder還指出,通過使用私有繼承,您可以實現很多,而沒有大部分陷阱。 – juanchopanza 2013-04-24 09:35:52