34.4 分配器

STL容器(见31.4节)和string(见第36章)都是资源句柄,获取和释放内存来保存其元素。为此,它们使用分配器(allocator)。分配器的基本目的是为给定类型提供内存资源以及提供在内存不再需要时将其归还的地方。因此,基本的分配器函数有:

例如:

Simple_alloc是最简单的标准分配器。注意,转换为char*:allocate()以及从char*:allocate()转换不会调用构造函数,而deallocate()不会调用析构函数;它们处理的是内存,而非强类型的对象。

我可以构造自己的分配器来从任意内存区域分配空间:

一旦创建了Arena,就可以在分配的内存上构造对象了:

通常,我们可以使用别名简化冗长的描述。例如:

一个分配器只有当其对象真正具有状态时(类似My_alloc)才会增加容器中的内存开销,这通常是依赖空基类优化(见28.5节)实现的。 ...

Get C++程序设计语言(第4部分:标准库)(原书第4版) now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.