有谁知道为什么STL容器没有虚拟析构函数?  
据我所知,唯一的好处是:
- 它通过一个指针(到虚拟方法表)减少实例的大小 
- 它使破坏和构造更快一点.  
缺点是以通常的方式对容器进行子类化是不安全的.  
编辑: 
也许我的问题可以改写"为什么不是STL容器设计允许继承?"   
因为它们不支持继承,所以当有人想要一个需要STL功能的新容器加上少量的附加功能时(例如一个专门的构造函数或带有地图默认值的新访问器),就会遇到以下选择:管他呢):
- 组合和接口复制:创建一个拥有STL容器作为私有成员的新模板或类,并为每个STL方法提供一个传递内联方法.这与继承一样高效,避免了虚方法表的成本(在重要的情况下).不幸的是,STL容器具有相当广泛的接口,因此这需要许多代码行,这看起来应该很容易.
- 只需创建函数:使用裸(可能是模板化的)文件范围的函数,而不是尝试添加成员函数.在某些方面,这可能是一个很好的方法,但封装的好处将丢失.
- 具有公共STL访问权限的组合:让STL容器的所有者允许用户访问STL容器本身(可能通过访问者保护).这需要编写库编写器的编码最少,但对用户来说却不太方便.一个用于组成的大卖点之一是,你减少代码耦合,但这种方法完全夫妇与业主容器STL容器(因为业主返回一个真正的STL容器).
- 编译时多态性:编写可能有些棘手,需要一些代码体操,并不适合所有情况.
作为一个附带问题:是否存在一种使用非虚拟析构函数进行子类化的标准安全方法(让我们假设我不想覆盖任何方法,只是我想添加新方法)?我的印象是,如果没有能力更改定义非虚拟类的代码,则没有通用且安全的方法.
编辑2: 
正如@doc所指出的那样,C++ 11的发言人using声明在一定程度上降低了作曲的成本.