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

12

可能是重复问题:
从STL容器继承实现而不是委派是否可以?

我的问题与为什么STL容器没有虚析构函数?有关。一些人(包括前一个问题的作者)认为没有虚析构函数意味着该类不可继承。我对这样的强烈说法持怀疑态度,因此我要求提供源或某些理由,但大多数回答者保持沉默。同时,没有人回应我的答案

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


这个问题和 https://dev59.com/VnI-5IYBdhLWcg3wCz7y 有什么区别吗? - jogojapan
还有这个: https://dev59.com/1Ww15IYBdhLWcg3wIoRM - jogojapan
1个回答

19
STL容器是允许继承的,没有任何阻止您从标准库容器类继承。如果这样做,不会出现编译错误。但是,它们不是为了允许通过基类指针销毁派生类对象而设计的,因此,如果您想在这种情况下使用继承(即动态多态性),则标准库容器显然不适合。
只有当您打算调用指向派生类对象的基类指针上的delete时,基类析构函数才需要是虚拟的。如果基类析构函数不是虚拟的,则会导致未定义行为。
因此,总结规则如下:
如果您需要动态多态性的继承,则标准库容器类不适用,但如果您不需要,可以安全地从中继承。
注意:您在提供的答案链接中的分析是正确的。可能是因为答案发布时间距原始问题发布时间已经很长(几年)了,所以它没有得到回应。我现在给您点赞。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接