close
Espacios de nombres
Variantes

std::allocator::deallocate

De cppreference.com
 
 
Gestión de memoria dinámica
Punteros inteligentes
(C++11)
(C++11)
(C++11)
(hasta C++17)
(C++11)
(C++23)
Asignadores de memoria
Recursos de memoria
Almacenamiento no inicializado
Algoritmos de memoria no inicializada
Algoritmos restringidos de memoria no inicializada
Apoyo para recolección de basura
(C++11)(hasta C++23)
(C++11)(hasta C++23)
(C++11)(hasta C++23)
(C++11)(hasta C++23)
(C++11)(hasta C++23)
(C++11)(hasta C++23)
Misceláneos
(C++20)
(C++11)
(C++11)
 
 
<tbody> </tbody> <tbody class="t-dcl-rev "> </tbody><tbody> </tbody>
void deallocate( T* p, std::size_t n );
(hasta C++20)
constexpr void deallocate( T* p, std::size_t n );
(desde C++20)

Desasigna el almacenamiento al que hace referencia el puntero p, que debe ser un puntero obtenido por una llamada anterior a allocate() o a allocate_at_least() (desde C++23).

El argumento n debe ser igual al primer argumento de la llamada a allocate() que originalmente produjo p, o en el rango [m, count] si p se obtiene de una llamada a allocate_at_least(m) que devolvió {p, count} (desde C++23); de lo contrario, el comportamiento no está definido.

Llama a ::operator delete(void*) o a ::operator delete(void*, std::align_val_t) (desde C++17), pero no se especifica cuándo y cómo se llama.

En la evaluación de una expresión constante, esta función debe desasignar el almacenamiento asignado dentro de la evaluación de la misma expresión.

(desde C++20)

Parámetros

p - Un puntero obtenido de allocate() o de allocate_at_least() (desde C++23).
n - El número de objetos pasados anteriormente a allocate(), o un número que se encuentra entre el número de objetos requeridos y los objetos actualmente asignados mediante allocate_at_least() (puede ser igual a cualquiera de los límites) (desde C++23).

Valor de retorno

(Ninguno)

Ejemplo

#include <algorithm>
#include <cstddef>
#include <iostream>
#include <memory>
#include <string>

class S {
    inline static int n{1};
    int m{};
    void pre() const { std::cout << "#" << m << std::string(m, ' '); }
public:
    S(int x) : m{n++} { pre(); std::cout << "S::S(" << x << ");\n"; }
    ~S() { pre(); std::cout << "S::~S();\n"; }
    void id() const { pre(); std::cout << "S::id();\n"; }
};

int main() {
    constexpr std::size_t n{4};
    std::allocator<S> allocator;
    try {
        S* s = allocator.allocate(n); // puede lanzar
        for (std::size_t i{}; i != n; ++i) {
        //  allocator.construct(&s[i], i+42); // eliminado en C++20
            std::construct_at(&s[i], i+42); // desde C++20
        }
        std::for_each_n(s, n, [](const auto& e) { e.id(); });
        std::destroy_n(s, n);
        allocator.deallocate(s, n);
    }
    catch(std::bad_array_new_length const& ex) { std::cout << ex.what() << '\n'; }
    catch(std::bad_alloc const& ex) { std::cout << ex.what() << '\n'; }
}

Salida:

#1 S::S(42);
#2  S::S(43);
#3   S::S(44);
#4    S::S(45);
#1 S::id();
#2  S::id();
#3   S::id();
#4    S::id();
#1 S::~S();
#2  S::~S();
#3   S::~S();
#4    S::~S();

Véase también

Asigna almacenamiento no inicializado.
(función miembro pública) [editar]
Asigna almacenamiento al menos tan grande como el tamaño solicitado.
(función miembro pública) [editar]
[estático]
desasigna almacenamiento mediante el asignador
Original:
deallocates storage using the allocator
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.

(función miembro estática pública de std::allocator_traits) [editar]