gpt4 book ai didi

c++ - 为什么使用 Boost.Intrusive 容器存储多态对象很好?

转载 作者:行者123 更新时间:2023-11-28 01:35:58 24 4
gpt4 key购买 nike

这是一条经常重复的建议,即不应从具有非虚拟析构函数的类继承(如果打算使用动态多态性)。这就是为什么从标准容器类继承被认为是一个坏主意。

另一方面,Boost.Intrusive 显式 states它的容器适合存储多态对象。在链接的示例中,这是通过从 boost::intrusive::list_base_hook<> 派生来实现的它没有虚拟析构函数,只在派生类中引入一个。

  1. 这是一个有效的设计吗?
  2. 如果是,为什么以及如何符合我上面提到的一般建议?我特别指出,为什么相同的逻辑不能证明从标准容器继承是合理的?

(请注意,我的问题不是关于标准容器和 Boost.Intrusive 容器之间的区别。我对 Boost.Intrusive 的正确用法很感兴趣,但我提到标准容器只是作为一个例子,因为它们经常出现在类似的主题时讨论。)

最佳答案

仅当派生类的使用涉及通过指向基类的指针获得对象所有权时,才不应从具有非虚析构函数的类继承。标准容器类没有什么特别之处。从它们继承不一定是个坏主意,但问题是应该首选其他扩展其功能的方法:添加独立功能或聚合。

源自 boost::intrusive::list_base_hook<>是一个完全有效的设计,因为派生对象的所有权永远不会通过指向 list_base_hook 的指针持有.请注意,库通过聚合提供 Hook (使用 list_member_hook ),这应该优于继承。

关于c++ - 为什么使用 Boost.Intrusive 容器存储多态对象很好?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49231636/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com