是设计用于允许继承的STL容器
Are STL containers designed to allow inheritance?
可能重复:
可以从STL容器继承实现而不是委托实现吗?
我的问题是关于为什么不;STL容器有虚拟析构函数吗?一些人(包括前一个问题的作者(确信,没有虚拟dtor意味着类是不可继承的。我对这样一个强有力的声明持怀疑态度,所以我询问了来源或一些推理,但大多数受访者保持沉默。也没有人回应我的回答
因此,我认为对前一个问题中的假设提出质疑并澄清这一重要问题是个好主意。STL容器的设计是否允许继承?更普遍地说:继承是否需要虚拟析构函数?
STL容器的设计是否允许继承
标准库容器允许继承。没有什么可以阻止您从标准库容器类继承。如果这样做,将不会出现任何编译错误。
但它们的设计目的并不是允许通过基类指针破坏派生类对象。因此,如果你想在这样的场景中使用继承(是动态多态性的缩写(,那么标准库容器显然不是为它设计的
继承是否需要虚拟析构函数
只有当您打算对指向派生类对象的基类指针调用delete
时,基类析构函数才需要是虚拟的。如果基类析构函数不是虚拟的,它将导致未定义的行为。
总之,规则是:
如果您需要动态多态性的继承,标准库容器类不是为它设计的,但如果您不需要,您可以安全地从它们继承
注意:您提供的答案链接中的分析是正确的。它只是没有得到回应,可能是因为答案在最初的Q发布后很长一段时间(几年(才发布。你现在有我的+1了。
相关文章:
- 继承函数的重载解析
- 在C++STL中是否有Polyval(Matlab函数)等价物?
- 为什么这个运算符<重载函数对 STL 算法不可见?
- 继承期间显示未知行为的子类
- 头文件-继承c++
- 为什么在保护模式下继承升级不起作用
- 在C应用程序中运行C++(带有STL)函数
- 使用2个键的cpp-stl::优先级队列排序不正确
- 通过继承类使用来自不同命名空间的运算符
- 子目录是否继承属性,例如add_definitions,include_directories和父Cmakelist.t
- 如果我真的真的想从 STL 容器继承,并且我继承构造函数并删除新运算符,会发生什么?
- STL 迭代器继承:"value_type"不命名类型
- 从 STL 容器继承并删除"新"运算符以防止由于缺少虚拟析构函数而导致未定义的行为是否有意义?
- 继承的构造函数和stl容器错误
- 具有迭代器和继承的 STL 容器
- 继承和 STL 向量
- (C++继承)将具有公共父级的对象存储在stl容器中
- 创建从STL集合继承的新类带来的bug
- 我可以/应该从STL迭代器继承
- 是设计用于允许继承的STL容器