当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


C++ std::allocator()用法及代码示例


分配器是负责封装内存管理的对象。当你想单独分配分两步做建筑的std::分配器使用。当独立的破坏和释放分两步完成它也可以用来。

C++中的所有STL容器都有一个类型参数Allocator,默认情况下为std::allocator。默认分配器仅使用运算符new和delete来获取和释放内存。

宣言:

template <class T> class allocator;

与std::allocator(关联的成员函数:

  1. 地址:尽管在C++ 20中已将其删除,但它用于获取对象的地址。
  2. 构造:它用于构造对象。在C++ 20中也将其删除。
  3. 破坏:它用于销毁已分配存储中的对象。在C++ 20中也将其删除。
  4. max_size:它返回支持的最大分配大小.C++ 17中已弃用,并在C++ 17中将其删除
    C++ 20。
  5. 分配:用于分配内存。
  6. 取消分配:用于内存释放。

下面的程序说明上述函数:



程序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的优势

  1. 分配器是STL容器的内存分配器。该容器可以将内存分配和de-allocation与它们的元素的初始化和销毁​​分开。因此,调用向量vec的vec.reserve(n)仅为至少n个元素分配内存。每个元素的构造函数都不会执行。
  2. 可以根据您需要的容器来调整分配器,例如,您只希望偶尔分配的向量。
  3. 与此相反,新不允许有控制其构造函数的调用和简单地在同一时间建造的所有对象。这是性病::分配器在新的优势




相关用法


注:本文由纯净天空筛选整理自vivekkothari大神的英文原创作品 std::allocator() in C++ with Examples。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。