std::allocator<T>::deallocate
From cppreference.com
C++
Feature test macros (C++20)
Concepts library (C++20)
Metaprogramming library (C++11)
Ranges library (C++20)
Filesystem library (C++17)
Concurrency support library (C++11)
Execution control library (C++26)
Memory management library
(exposition only*)
(C++11)
(C++23)
(C++11)
(C++17)
(C++11)
(C++11)
(C++20)
(C++20)
(C++17)
(C++11)
(C++17)
(C++20)
(C++17)
(C++17)
(C++17)
(C++17)
(C++17)
(C++17)
(C++20)
(C++20)
(C++20)
(C++20)
(C++20)
(C++20)
(C++20)
(C++20)
(C++20)
(C++20)
(C++17)
(C++17)
(C++17)
(C++17)
(C++17)
(C++17)
(C++17)
(C++17)
Uninitialized storage (until C++20)
(until C++20*)
(until C++20*)
(until C++20*)
Garbage collector support (until C++23)
(C++11)(until C++23)
(C++11)(until C++23)
(C++11)(until C++23)
(C++11)(until C++23)
(C++11)(until C++23)
(C++11)(until C++23)
(C++11)
(C++11)
(C++17)
(C++20)
(C++17)
(C++11)
(C++11)
(C++11)
(until C++17*)
(C++11)
(C++17)
(C++26)
(C++26)
(C++11)
(C++11)
(C++11)
(C++23)
(C++23)
(C++11)
(C++20)
(C++11)
(C++11)
(C++20)
(C++26)
std::allocator
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 since C++20)
Deallocates the storage referenced by the pointer p, which must be a pointer obtained by an earlier call to allocate() or allocate_at_least()
(since C++23).
The argument n must be equal to the first argument of the call to allocate() that originally produced p, or in the range [
m,
count]
if p is obtained from a call to allocate_at_least(m) which returned {p, count}(since C++23); otherwise, the behavior is undefined.
Calls ::operator delete (void*) or ::operator delete (void*, std::align_val_t )(since C++17), but it is unspecified when and how it is called.
In evaluation of a constant expression, this function must deallocate storage allocated within the evaluation of the same expression.
(since C++20)Contents
[edit] Parameters
p
-
pointer obtained from allocate() or
allocate_at_least()
(since C++23)
n
-
number of objects earlier passed to allocate() , or a number between requested and actually allocated number of objects via
allocate_at_least()
(may be equal to either bound)(since C++23)
[edit] Return value
(none)
[edit] Example
Run this code
#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); // may throw for (std::size_t i{}; i != n; ++i) { // allocator.construct(&s[i], i + 42); // removed in C++20 std::construct_at (&s[i], i + 42); // since 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'; } }
Output:
#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();
[edit] See also
(C++23)
(public member function) [edit]
[static]
(public static member function of
std::allocator_traits<Alloc>
) [edit]