【发布时间】:2018-08-20 06:15:51
【问题描述】:
这是一个经常重复的建议,即不应从具有非虚拟析构函数的类继承(如果打算使用动态多态性)。这就是为什么从标准容器类继承被认为是一个坏主意的原因。
另一方面,Boost.Intrusive 明确地states 表示它的容器适合存储多态对象。在链接的示例中,这是通过派生自 boost::intrusive::list_base_hook<> 来实现的,该 boost::intrusive::list_base_hook<> 没有虚拟析构函数,并且仅在派生类中引入一个。
- 这是一个有效的设计吗?
- 如果是这样,它为什么以及如何符合我上面提到的一般建议?特别是,为什么不能用相同的逻辑证明从标准容器继承?
(请注意,我的问题不是关于标准容器和 Boost.Intrusive 容器之间的区别。我对正确使用 Boost.Intrusive 很感兴趣,但我仅将标准容器作为示例提及,因为它们经常在出现类似主题时出现讨论过。)
【问题讨论】:
标签: c++ boost polymorphism