为什么标准库容器没有共同的基础?

ste*_*fen 8 c++ stl c++-standard-library

只是出于兴趣......

如果我要设计一个容器库,我肯定会从一个公共基类派生它们,它们会有(也许是抽象的)方法声明,如size()insert().

标准库容器是否有充分的理由不能像这样实现?

Fre*_*abe 13

在C++中,继承用于运行时多态(读取:运行时接口重用).它带有在运行时通过vtable重定向的开销.

为了使多个容器类具有相同的接口(以便API可预测且算法可以做出假设),不需要继承.只要给他们相同的方法,你就完成了.C++中的容器(和算法)作为模板实现,这意味着您将获得编译时多态性.

这可以避免任何运行时开销,并且符合C++的口头禅"只付你需要的东西".

  • 只有当你有虚拟方法时,你才拥有虚函数表。当您使用基类中的方法时,您不需要支付任何费用。 (2认同)
  • @Scharron:没错.但是,当您使用基类时,客户端可以使用指向派生类的基类指针.在该指针上调用`delete`当然也应该执行派生类的析构函数 - 这意味着你需要一个虚拟析构函数.然后你有一个vtable. (2认同)