为什么boost::ptr_list使用底层的void*

Why does boost::ptr_list uses underlying void *?

本文关键字:void boost ptr list 为什么      更新时间:2023-10-16

boost ptr_list文档声明容器使用底层std::list<void*>

为什么他们使用这种类型而不是更专业的std::list<T*>

这可能是为了减少模板实例化的数量。如果它使用std::list<T*>,那么每次使用ptr_list<T>也会实例化std::list<T*>。如果你经常使用ptr_list,那就需要大量的实例化。

这使得无论实例化它的类型如何,都可以轻松共享几乎所有代码。几乎所有代码都在单个std::list<void *>中。每个实例化仅在需要时添加要在T *void *之间强制转换的代码。

当然,如果没有这些帮助,现代编译器/链接器可以完成相当多的工作,但情况并非总是如此(由于各种原因,有些人仍然使用旧的工具链)。