【问题标题】:What does boost::container::allocator_traits::is_partially_propagable mean?boost::container::allocator_traits::is_partially_propagable 是什么意思?
【发布时间】:2018-05-11 23:39:26
【问题描述】:

当我遇到 boost::container::allocator_traits::is_partially_propagable 时,我试图理解 boost::container::allocator_traits

我在网上找不到任何关于它的其他文档,我可以理解 boost::container::allocator_traits 的所有其他成员,除了 is_partially_propagable 和 storage_is_unpropagable。

编辑:

以及,它们是如何实现的,以及在编写容器时如何使用它们?

【问题讨论】:

    标签: c++ boost boost-container


    【解决方案1】:

    它(is_partially_propagable)意味着分配器使用内部存储(它有状态),并且不是所有由它分配的内存都可以被另一个分配器释放,即使两者比较相等。 (相同类型的分配器应该总是比较相等并且可以互换)

    storage_is_unpropagable 所做的是获取一个指向已分配内存的指针,如果这是不可传播的内存,则返回 true。 (因为并非所有内存都必须是不可传播的)

    此分配器 (small_vector_allocator) 用作small_vector 中的空间优化。

    https://www.boost.org/doc/libs/1_65_0/boost/container/small_vector.hpp

    【讨论】:

    • 您能解释一下它们是如何实现的吗?
    • 另外,写容器的时候能不能多讲讲如何使用它们?
    • @JiaHaoXu 我不确定这个特定的分配器。但是我使用了其他具有内部缓冲区的分配器(即具有某些模板参数大小的字节数组成员),并在分配时返回指向该内部缓冲区的指针,直到它耗尽,此时他们只需转发 allocate() 调用到默认分配器(即new)。这些分配器适用于需要大量小分配(且无需解除分配)的容器。
    • 关于Allocators of the same type are supposed to always compare equal and be interchangeable,对于boost::container::allocator_traits中相同类型的对象的相等性没有限制。
    • @JiaHaoXu 限制在 C++ 标准中,该规则的例外是特定于 boost 的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-10-11
    • 1970-01-01
    • 2017-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多