C++ 自定义内存分配器:从无状态到有状态的实现与测试
1. 可选函数介绍
在 C++ 中,除了属性之外,还有一些可选函数能为容器提供关于分配器类型的额外信息。
-max_size() 函数:
- 函数原型为size_type myallocator::max_size();,它用于告知容器分配器能够分配的最大大小 “n”。不过在 C++17 中,该函数已被弃用。
- 此函数返回分配器能够执行的最大可能分配量。在 C++17 中,其默认值为std::numeric_limits<size_type>::max() / sizeof(value_type),但在大多数情况下,这并非有效答案,因为多数系统没有这么多可用的 RAM,所以该函数在实际应用中价值不大。当分配失败时,会抛出std::bad_alloc异常,向容器表明尝试执行的分配操作不可行。
-construct 和 destroy 函数:
- 函数原型分别为template<typename T, typename... Args> static void myallocator::construct(T* ptr, Args&&... args);和template<typename T> static void myallocator::destroy(T* ptr);。同样在 C++17 中被弃用。