这是一篇翻译,原文在Polymorphic Allocators, std::vector Growth and Hacking - C++ Stories
这篇博客非常适合了解pmr的基本用法和特性,故翻译它并作为我的内存篇的开篇。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
C++17 中的多态分配器概念是对标准库中的标准分配器的增强。
它比普通分配器更易于使用,允许容器拥有相同的类型但具有不同的分配器,甚至可以在运行时更改分配器。
让我们看看如何使用它,并且以一种简单的方式来观察 std::vector 容器的增长。
简而言之,多态分配器遵循标准库中分配器的规则,但其核心是使用内存资源(memory resource)对象来执行内存管理。
多态分配器包含一个指向内存资源类的指针,因此它可以使用虚方法调度。您可以在运行时更改内存资源,同时保持分配器的类型不变。这与常规分配器相反,常规分配器使得使用不同分配器的两个容器也成为不同类型。
所有多态分配器的类型都位于单独的命名空间 std::pmr 中(PMR 代表多态内存资源),在头文件 <memory_resource> 中。