是设计用于允许继承的STL容器

Are STL containers designed to allow inheritance?

本文关键字:继承 STL 容器 用于 许继承      更新时间:2023-10-16

可能重复:
可以从STL容器继承实现而不是委托实现吗?

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

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

STL容器的设计是否允许继承

标准库容器允许继承。没有什么可以阻止您从标准库容器类继承。如果这样做,将不会出现任何编译错误。
但它们的设计目的并不是允许通过基类指针破坏派生类对象。因此,如果你想在这样的场景中使用继承(是动态多态性的缩写(,那么标准库容器显然不是为它设计的

继承是否需要虚拟析构函数

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

总之,规则是:

如果您需要动态多态性的继承,标准库容器类不是为它设计的,但如果您不需要,您可以安全地从它们继承

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