我正在使用外部库,他们的类有一个特定的约定,这对我来说毫无意义。 他们会这样声明:
class SomeClass
{
public:
using allocator_type = ::std::allocator<uint8_t>;
SomeClass() noexcept :
SomeClass(allocator_type())
{}
explicit SomeClass(const allocator_type& allocator) noexcept;
...
它们将默认分配器作为内部分配的参数。 但默认分配器不可自定义,我根本不知道如何控制内存。 它是无状态的,并且总是使用 new() 进行全局分配。 看起来他们应该使用带有虚函数的接口,或者由用户定义的模板类。
这个约定似乎完全没有意义,这让我觉得我一定错过了一些东西。 我的说法正确吗,还是有什么我不明白的目的?
它让您可以灵活地选择如何收集内存并将其返回给系统。可能存在这样的用例:人们会重用先前分配的内存或定义指定的对齐要求或调用更优化的内存分配操作系统接口。 它基本上通过一个漂亮的接口抽象了低级内存分配调用,并提供了大量的自定义点和错误处理。