分配器是负责封装内存管理的对象。当你想单独分配分两步做建筑的std::分配器使用。当独立的破坏和释放分两步完成它也可以用来。
C++中的所有STL容器都有一个类型参数Allocator,默认情况下为std::allocator。默认分配器仅使用运算符new和delete来获取和释放内存。
宣言:
template <class T> class allocator;
与std::allocator(关联的成员函数:
- 地址:尽管在C++ 20中已将其删除,但它用于获取对象的地址。
- 构造:它用于构造对象。在C++ 20中也将其删除。
- 破坏:它用于销毁已分配存储中的对象。在C++ 20中也将其删除。
- max_size:它返回支持的最大分配大小.C++ 17中已弃用,并在C++ 17中将其删除
C++ 20。 - 分配:用于分配内存。
- 取消分配:用于内存释放。
下面的程序说明上述函数:
程序1:
// C++ program for illustration
// of std::allocator() function
#include <iostream>
#include <memory>
using namespace std;
int main()
{
// allocator for integer values
allocator<int> myAllocator;
// allocate space for five ints
int* arr = myAllocator.allocate(5);
// construct arr[0] and arr[3]
myAllocator.construct(arr, 100);
arr[3] = 10;
cout << arr[3] << endl;
cout << arr[0] << endl;
// deallocate space for five ints
myAllocator.deallocate(arr, 5);
return 0;
}
输出:
10 100
程序2:
// C++ program for illustration
// of std::allocator() function
#include <iostream>
#include <memory>
#include <string>
using namespace std;
int main()
{
// allocator for string values
allocator<string> myAllocator;
// allocate space for three strings
string* str = myAllocator.allocate(3);
// construct these 3 strings
myAllocator.construct(str, "Geeks");
myAllocator.construct(str + 1, "for");
myAllocator.construct(str + 2, "Geeks");
cout << str[0] << str[1] << str[2];
// destroy these 3 strings
myAllocator.destroy(str);
myAllocator.destroy(str + 1);
myAllocator.destroy(str + 2);
// deallocate space for 3 strings
myAllocator.deallocate(str, 3);
}
输出:
GeeksforGeeks
使用std::allocator的优势
- 分配器是STL容器的内存分配器。该容器可以将内存分配和de-allocation与它们的元素的初始化和销毁分开。因此,调用向量vec的vec.reserve(n)仅为至少n个元素分配内存。每个元素的构造函数都不会执行。
- 可以根据您需要的容器来调整分配器,例如,您只希望偶尔分配的向量。
- 与此相反,新不允许有控制其构造函数的调用和简单地在同一时间建造的所有对象。这是性病::分配器在新的优势
相关用法
- C语言 strtok()、strtok_r()用法及代码示例
- C语言 memset()用法及代码示例
- C++ std::mismatch()用法及代码示例
- C++ wcscpy()用法及代码示例
- C++ wcscmp()用法及代码示例
- C++ ratio_equal()用法及代码示例
- C++ std::equal_to用法及代码示例
- C++ quick_exit()用法及代码示例
- C++ multiset lower_bound()用法及代码示例
- C++ multiset upper_bound()用法及代码示例
- C++ multiset max_size()用法及代码示例
- C++ forward_list max_size()用法及代码示例
- C++ array data()用法及代码示例
- C++ multiset size()用法及代码示例
- C++ ratio_not_equal()用法及代码示例
- C++ std::bit_or用法及代码示例
注:本文由纯净天空筛选整理自vivekkothari大神的英文原创作品 std::allocator() in C++ with Examples。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。