gpt4 book ai didi

c++ - 为什么 C++ Allocator 概念具有构造和销毁功能?

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:07:18 26 4
gpt4 key购买 nike

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

最佳答案

今天construct的主要用例和 destroy我知道的是允许使分配器感知容器分层:也就是说,它将自动对任何嵌套对象使用相同的分配器。这是通过 scoped_allocator_adaptor 完成的,这是一个“适应”现有分配器的特殊分配器,它确实定义了 construct以便它向下传递分配器。这对于常见的情况很有用,例如 vector<string>。并且您希望所有内部字符串都使用与 vector 相同的分配器。这只有在分配器控制构造时才能完成,并且它可以将自身作为额外参数传递给它被要求构造的任何东西。

我会在这里进一步阅读:http://en.cppreference.com/w/cpp/memory/scoped_allocator_adaptor .

理论上,您也可以将其用于检测;它可能在非生产构建中很有用,但它是一个非常边缘的用例(恕我直言)。分配器的用户几乎总是调用 allocate然后 construct ,因此检测的值(value)有限 construct分别。

编辑:我应该说,这是 construct 的主要用例. destroy那么那里只是为了对称。

关于c++ - 为什么 C++ Allocator 概念具有构造和销毁功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46895111/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com