用户定义的容器是std :: vector的包装器,是继承还是包含std :: vector?
我有一个应该是容器的类。我看到两个选择:
1)从vector继承 2)有一个私有成员向量并覆盖所有向量函数,使我的容器充当向量
我不确定这只是一个风格问题,还是一种方式从根本上说更好 比另一个?
我想要添加的额外功能很少,这里的数据成员和功能很少 那里。通常,使用向量中的数据将是方便的功能。
答案 0 :(得分:10)
首先,STL容器不应该被继承。他们甚至没有虚拟析构函数。
其次,最好选择合成/聚合以支持继承,因为这是一种较低的耦合技术,对代码的限制/要求较少。
有关详细信息,请参阅this answer,此问题已多次提出。
答案 1 :(得分:0)
有关这个主题的有趣读物 - Thou shalt not inherit from std::vector
与标题所暗示的不同,从std :: vector继承是可以的,最后它更像是一个架构问题。它有助于重用或编码复杂性吗?通过这样做,它是否更容易理解,维护和调试代码?