用户定义的容器是std :: vector的包装器,是继承还是包含std :: vector?

时间:2014-01-16 01:29:25

标签: c++ vector

用户定义的容器是std :: vector的包装器,是继承还是包含std :: vector?

我有一个应该是容器的类。我看到两个选择:

1)从vector继承 2)有一个私有成员向量并覆盖所有向量函数,使我的容器充当向量

我不确定这只是一个风格问题,还是一种方式从根本上说更好 比另一个?

我想要添加的额外功能很少,这里的数据成员和功能很少 那里。通常,使用向量中的数据将是方便的功能。

2 个答案:

答案 0 :(得分:10)

首先,STL容器不应该被继承。他们甚至没有虚拟析构函数。

其次,最好选择合成/聚合以支持继承,因为这是一种较低的耦合技术,对代码的限制/要求较少。

有关详细信息,请参阅this answer,此问题已多次提出。

答案 1 :(得分:0)

有关这个主题的有趣读物 - Thou shalt not inherit from std::vector

与标题所暗示的不同,从std :: vector继承是可以的,最后它更像是一个架构问题。它有助于重用或编码复杂性吗?通过这样做,它是否更容易理解,维护和调试代码?