为什么允许分配器覆盖其value_type的ctors和dtors?

时间:2016-02-25 14:22:30

标签: c++

据我所知,容器应该分别使用std::allocator_traits<Alloc>::constructstd::allocator_traits<Alloc>::destroy Alloc::constructAlloc::destroyvalue_type::value_type和{{1} (默认值)。

为什么允许分配器覆盖其value_type::~value_type的默认ctor和dtor?什么时候有用?

1 个答案:

答案 0 :(得分:3)

这允许分配器以自定义方式构造对象。

基于标准库特性的示例是std::scoped_allocator_adaptor,它将分配器传递给它构造的任何对象(只要它们支持来自分配器的构造)。当您希望容器的所有元素使用与容器本身相同的分配器时,这非常有用。当容器的分配器构造一个元素时,它会将自身(或者自身的副本反弹到元素类型)传递给元素。

另一个例子是,如果你有像double这样的普通类型的巨大向量,但如果你要重新开始,你不想支付零初始化所有向量元素的成本 - 无论如何,他们分配新的价值观。您可以在其construct函数中执行任何不执行任何操作的自定义分配器,以便在调整矢量大小时保持元素未初始化。