doc*_*doc 12 c++ inheritance destructor stl
可能重复:
是否可以从STL容器继承实现,而不是委托?
我的问题与为什么STL容器没有虚拟析构函数有关?有些人(包括前一个问题的作者)确信没有虚拟dtor意味着类不可继承.我对这样一个强烈的声明持怀疑态度,所以我要求提供来源或一些推理,但大多数受访者保持沉默.也没有人回答我的回答
因此,我认为质疑前一个问题中的假设并澄清这个重要问题是个好主意.STL容器是否设计为允许继承?更一般地说:继承需要虚拟析构函数吗?
Alo*_*ave 17
STL容器是否设计为允许继承?
标准库容器允许继承.没有什么能阻止您继承标准库容器类.如果这样做,您将不会收到任何编译错误.
但它们不是为了允许通过Base类指针破坏派生类对象而设计的.因此,如果您想在这种情况下使用继承(简而言之就是动态多态),那么标准库容器显然不是为它而设计的.
继承需要虚拟析构函数吗?
如果要调用delete
指向派生类对象的基类指针,则只需要基类析构函数是虚拟的.如果基类析构函数不是虚拟的,它将导致未定义的行为.
总而言之,规则是:
如果您需要继承动态多态,标准库容器类不是为它设计的,但如果您不需要它,您可以安全地继承它们.
注意:您提供的答案链接中的分析是正确的.它只是没有得到回应,可能是因为答案在原始Q发布后很长时间(几年)发布.你现在有我的+1.
归档时间: |
|
查看次数: |
2497 次 |
最近记录: |