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

标签 c++ inheritance stl destructor

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

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

所以我认为质疑前一个问题中的假设并澄清这个重要问题是个好主意。 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。

关于c++ - STL 容器是否设计为允许继承?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14089088/

相关文章:

c++ - 从数组(指针)中分配一个 vector

c++ - 重写的插槽 shouldInterruptJavaScript() 未被调用

c++ - 在没有 shell 的情况下从 C++ 执行二进制文件

c# - 对继承类的最小起订量测试总是返回 null

java - 使用 List<?> 成员定义抽象泛型类

c++ - std::map 和 std::pair 的问题

c++ - C++ 中的共享内存 UNIX 段错误 (fork())

python - python 菱形继承(钻石问题)中的 super() 奇怪行为

c++ - 我可以使用 std::stack 作为对象池容器吗?

c++ - “STL”和 “C++ Standard Library”有什么区别?