std::allocator::deallocate
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) | |
(C++23) |
Asigna almacenamiento al menos tan grande como el tamaño solicitado. (función miembro pública) |
[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)
|