boost::container::allocator_traits::is_partially_propagable 是啥意思?

Posted

技术标签:

【中文标题】boost::container::allocator_traits::is_partially_propagable 是啥意思?【英文标题】: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。

编辑:

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

【问题讨论】:

【参考方案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 的。

以上是关于boost::container::allocator_traits::is_partially_propagable 是啥意思?的主要内容,如果未能解决你的问题,请参考以下文章