据我所知,容器应该分别使用std::allocator_traits<Alloc>::construct
和std::allocator_traits<Alloc>::destroy
Alloc::construct
和Alloc::destroy
或value_type::value_type
和{{1} (默认值)。
为什么允许分配器覆盖其value_type::~value_type
的默认ctor和dtor?什么时候有用?
答案 0 :(得分:3)
这允许分配器以自定义方式构造对象。
基于标准库特性的示例是std::scoped_allocator_adaptor
,它将分配器传递给它构造的任何对象(只要它们支持来自分配器的构造)。当您希望容器的所有元素使用与容器本身相同的分配器时,这非常有用。当容器的分配器构造一个元素时,它会将自身(或者自身的副本反弹到元素类型)传递给元素。
另一个例子是,如果你有像double
这样的普通类型的巨大向量,但如果你要重新开始,你不想支付零初始化所有向量元素的成本 - 无论如何,他们分配新的价值观。您可以在其construct
函数中执行任何不执行任何操作的自定义分配器,以便在调整矢量大小时保持元素未初始化。