std::allocator() en C++ con ejemplos

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() :

  1. dirección: Se utiliza para obtener la dirección de un objeto aunque se elimina en C++20.
  2. construct: se utiliza para construir un objeto. También se elimina en C++20.
  3. destroy: se utiliza para destruir un objeto en el almacenamiento asignado. También se elimina en C++20.
  4. 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.
  5. allocate: se utiliza para la asignación de memoria.
  6. 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;
}
Producción:

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);
}
Producción:

GeeksforGeeks

Ventaja de usar std::allocator

  1. 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á.
  2. El asignador se puede ajustar de acuerdo con el contenedor de su necesidad, por ejemplo, vector donde solo desea asignar ocasionalmente.
  3. 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

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *