std::allocator<T>:: deallocate
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Member functions | ||||
|
(until C++20)
|
||||
|
(C++23)
|
||||
|
allocator::deallocate
|
||||
|
(until C++20)
|
||||
|
(until C++20)
|
||||
|
(until C++20)
|
||||
| Non-member functions | ||||
|
(until C++20)
|
|
void
deallocate
(
T
*
p,
std::
size_t
n
)
;
|
(constexpr desde C++20) | |
Libera el almacenamiento referenciado por el puntero
p
, que debe ser un puntero obtenido por una llamada anterior a
allocate()
o
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 obtuvo de una llamada a
allocate_at_least
(
m
)
que devolvió
{
p, count
}
(desde C++23)
; de lo contrario, el comportamiento es indefinido.
Llama a :: operator delete ( void * ) o :: operator delete ( void * , std:: align_val_t ) (desde C++17) , pero no está especificado cuándo ni 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. |
(since C++20) |
Contenidos |
Parámetros
| p | - |
puntero obtenido de
allocate()
o
allocate_at_least()
(desde C++23)
|
| n | - |
número de objetos pasado anteriormente a
allocate()
, o un número entre el solicitado y el realmente asignado 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 excepción 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) |
|
|
(C++23)
|
asigna almacenamiento no inicializado de al menos el tamaño solicitado
(función miembro pública) |
|
[static]
|
desasigna almacenamiento usando el asignador
(función miembro estática pública de
std::allocator_traits<Alloc>
)
|