我认为Allocator的唯一任务是分配和释放内存,为什么我不使用某种类型的构造函数和析构函数来初始化和最终化? 如果我从未实现构造和销毁方法,std :: allocator_traits仍将使用T的构造函数和析构函数来完成工作,我知道std :: allocator就是这样工作的(C ++ 17),为什么不是所有的Allocator都这样工作?
答案 0 :(得分:1)
今天,我所知道的construct
和destroy
的主要用例是允许分区识别容器分层:即,它将自动使用相同的分配器对于任何嵌套对象。这是通过scoped_allocator_adaptor
完成的,construct
是一个特殊的分配器,它可以适应&#34;现有的分配器,它确实定义vector<string>
,以便它向下传递分配器。这对于您有allocate
的常见情况很有用,并且您希望所有内部字符串都使用与向量相同的分配器。这只能在分配器控制构造时完成,并且它可以作为额外参数传递给它要求构建的任何东西。
我在此处进一步了解:http://en.cppreference.com/w/cpp/memory/scoped_allocator_adaptor。
理论上你也可以用它来做仪器;它可能在非生产版本中很有用,但它是一个非常边缘的用例(恕我直言)。分配器的用户几乎总是调用construct
然后调用construct
,因此在单独检测construct
时价值有限。
编辑:我应该说,这是destroy
的主要用例。 for(var i = 0; i < 3; i++){
// ... do something
}
只是为了对称。