【问题标题】:Are STL containers designed to allow inheritance? [duplicate]STL 容器是否设计为允许继承? [复制]
【发布时间】:2012-12-14 20:59:17
【问题描述】:

可能重复:
Is it okay to inherit implementation from STL containers, rather than delegate?

我的问题与Why don't STL containers have virtual destructors? 有关有些人(包括前一个问题的作者)确信没有虚拟 dtor 意味着类不可继承。我对如此强烈的声明持怀疑态度,因此我询问了来源或一些推理,但大多数受访者保持沉默。也没有人回复我的answer

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

【问题讨论】:

标签: c++ inheritance stl destructor


【解决方案1】:

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

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

继承需要虚拟析构函数吗?

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

所以总结一下,规则是:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-11-22
    • 1970-01-01
    • 1970-01-01
    • 2022-01-03
    • 2012-06-08
    • 2015-10-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多