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

C++ STL容器是否设计为允许继承?,c++,inheritance,stl,destructor,C++,Inheritance,Stl,Destructor,可能重复: 我的问题涉及到一些人(包括前一个问题的作者)确信没有虚拟dtor意味着类是不可继承的。我对如此强烈的声明表示怀疑,因此我询问了消息来源或一些理由,但大多数受访者保持沉默。也没有人回应我的问题 因此,我认为质疑前一个问题中的假设并澄清这一重要问题是一个好主意。STL容器是否设计为允许继承?更一般地说:继承是否需要虚拟析构函数 STL容器是否设计为允许继承? 标准库容器允许继承。没有什么可以阻止您从标准库容器类继承。如果这样做,您将不会得到任何编译错误。 但它们的设计目的不是允许通过基

可能重复:

我的问题涉及到一些人(包括前一个问题的作者)确信没有虚拟dtor意味着类是不可继承的。我对如此强烈的声明表示怀疑,因此我询问了消息来源或一些理由,但大多数受访者保持沉默。也没有人回应我的问题

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

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

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

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

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

总之,规则是:

如果需要继承动态多态性,则标准库容器类不是为此而设计的,但如果不需要继承,则可以安全地从中继承。


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

这个问题和我的问题有什么不同吗?还有这个问题