Los asignadores son objetos responsables de encapsular la gestión de la memoria. std::allocator se usa cuando desea separar la asignación y realizar la construcción en dos pasos. También se utiliza cuando la destrucción y la desasignación por separado se realizan en dos pasos. Todos los contenedores STL en C++ tienen un parámetro de tipo Allocator que es por defecto std::allocator . El asignador predeterminado simplemente usa los operadores new y delete para obtener y liberar memoria. Declaración :
template <class T> class allocator;
Funciones miembro asociadas con std::allocator() :
- dirección: Se utiliza para obtener la dirección de un objeto aunque se elimina en C++20.
- construct: se utiliza para construir un objeto. También se elimina en C++20.
- destroy: se utiliza para destruir un objeto en el almacenamiento asignado. También se elimina en C++20.
- max_size: devuelve el tamaño de asignación admitido más grande. Está en desuso en C++ 17 y se elimina en C++ 20.
- allocate: se utiliza para la asignación de memoria.
- desalocate: se utiliza para la desasignación de memoria.
Los siguientes programas ilustran la función mencionada anteriormente: Programa 1:
CPP
// 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); // no longer allowed in C++20 arr[0] = 100; // do this instead arr[3] = 10; cout << arr[3] << endl; cout << arr[0] << endl; // deallocate space for five ints myAllocator.deallocate(arr, 5); return 0; }
10 100
Programa 2:
CPP
// 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
Ventaja de usar std::allocator
- allocator es el asignador de memoria para los contenedores STL. Este contenedor puede separar la asignación y desasignación de memoria de la inicialización y destrucción de sus elementos. Por lo tanto, una llamada de vec.reserve(n) de un vector vec asigna solo memoria para al menos n elementos. El constructor de cada elemento no se ejecutará.
- El asignador se puede ajustar de acuerdo con el contenedor de su necesidad, por ejemplo, vector donde solo desea asignar ocasionalmente.
- Por el contrario, new no permite tener control sobre qué constructores se llaman y simplemente construyen todos los objetos al mismo tiempo. Esa es una ventaja de std:: allocator sobre new
Publicación traducida automáticamente
Artículo escrito por vivekkothari y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA