Namespaces
Variants
Actions

std::allocator<T>::deallocate

From cppreference.com
< cpp‎ | memory‎ | allocator
 
 
Memory management library
(exposition only*)
Uninitialized storage (until C++20)
(until C++20*)
(until C++20*)

(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)
 
std::allocator
Member functions
(until C++20)
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 [mcount] 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)

[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

allocates uninitialized storage
(public member function) [edit]
allocates uninitialized storage at least as large as requested size
(public member function) [edit]
[static]
deallocates storage using the allocator
(public static member function of std::allocator_traits<Alloc>) [edit]
Retrieved from "https://en.cppreference.com/mwiki/index.php?title=cpp/memory/allocator/deallocate&oldid=163383"

AltStyle によって変換されたページ (->オリジナル) /