为什么C ++ Allocator概念具有构造和破坏功能?

时间:2017-10-23 17:23:05

标签: c++ c++11 memory-management

我认为Allocator的唯一任务是分配和释放内存,为什么我不使用某种类型的构造函数和析构函数来初始化和最终化? 如果我从未实现构造和销毁方法,std :: allocator_traits仍将使用T的构造函数和析构函数来完成工作,我知道std :: allocator就是这样工作的(C ++ 17),为什么不是所有的Allocator都这样工作?

1 个答案:

答案 0 :(得分:1)

今天,我所知道的constructdestroy的主要用例是允许分区识别容器分层:即,它将自动使用相同的分配器对于任何嵌套对象。这是通过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 } 只是为了对称。