分配器是負責封裝內存管理的對象。當你想單獨分配分兩步做建築的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++ set_symmetric_difference用法及代碼示例
- 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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。