2013-04-24 116 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