从std::vector继承

8
这里有很多回答说不要继承std::vector等类,例如这个问题。我理解其中的原因并且同意。然而,在这里的第4.4.1.2节中,Bjarne Stroustrup本人继承std::vector以添加范围检查。
那是一个特殊情况,还是只在那种情况下可以这样做,或者他真的不应该这样做:P

11
Bjarne Stroustrup 是一个特例。 - Chowlett
我认为这是展示他所描述的原则最简单的方法,而不必设置一个复杂的示例类。 - Peter Wood
1个回答

4

我认为这个答案完美地回答了你的问题。

std::vector继承并不是不可能的,但由于没有虚析构函数,它可能会受到很大限制,对其他人来说也相当困惑。通过组合进行扩展比继承更好、更容易维护。

也许Stroustrup只是想表明它是可行的,而不一定意味着他建议这样做。


这很有道理,而且你也不太可能以向量多态的方式使用它。 - jcoder
2
@jcoder 还要注意,通过使用私有继承,您可以在避免大多数陷阱的情况下实现很多功能。 - juanchopanza
有趣的是,Stroustrup在他的书《C++程序设计语言》中的第16.3.4节中再次提到了同样的例子,并加入了以下警告: “……从具体类派生应该谨慎进行,只有在缺乏虚函数和运行时类型信息的情况下才能偶尔使用……”- 我会总结为:如果你知道自己在做什么,它就能够工作! - trev

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接