关于c ++:STL容器是否设计为允许继承?

Are STL containers designed to allow inheritance?

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
Is it okay to inherit implementation from STL containers, rather than delegate?

我的问题是,为什么STL容器没有虚拟析构函数?有些人(包括前一个问题的作者)相信没有虚拟DTOR意味着类是不可继承的。我对这样一个强有力的声明持怀疑态度,所以我询问了来源或一些理由,但大多数受访者保持沉默。也没有人回应我的回答

因此,我认为最好对前一个问题中的假设提出质疑,并澄清这一重要问题。STL容器是否设计为允许继承?更一般地说:继承需要虚拟析构函数吗?


Are STL containers designed to allow inheritance or not?

标准库容器允许继承。没有什么能阻止您从标准库容器类继承。如果这样做,您将不会得到任何编译错误。但它们的设计目的并不是为了允许通过基类指针销毁派生类对象。因此,如果您想为这样的场景使用继承(简称动态多态),那么标准库容器显然不是为它设计的。

Is virtual destructor required for inheritance?

只有当您打算在指向派生类对象的基类指针上调用delete时,才需要基类析构函数是虚拟的。如果基类析构函数不是虚拟的,它将导致未定义的行为。

总而言之,规则是:

If you need inheritance for dynamic polymorphism standard library container classes are not designed for it, but If you don't need that you can safely inherit from them.

注意:您在回答链接中的分析是正确的。它只是没有得到回复,可能是因为答案在最初的Q发布后发布了很长时间(几年)。你现在有了我的+1。