Namensräume
Varianten
Aktionen

std::allocator<T>:deallocate

Von cppreference.com
< cpp‎ | Speicher‎ | Allocator
 
 
Speicherverwaltungsbibliothek
(nur Exposition*)
Algorithmen für uninitialisierten Speicher
(C++17)
(C++17)
(C++17)
Beschränkte uninitialisierte
Speicher-Algorithmen
C-Bibliothek

Allocatoren
Speicherressourcen
Unterstützung für Garbage Collection
(C++11)(bis C++23)
(C++11)(bis C++23)
(C++11)(bis C++23)
(C++11)(bis C++23)
(C++11)(bis C++23)
(C++11)(bis C++23)
Uninitialisierter Speicher
Explizites Lebenszeitmanagement
 
 
void deallocate( T* p, std::size_t n );
(constexpr seit C++20)

Gibt den Speicher frei, auf den der Zeiger p verweist, der ein Zeiger sein muss, der durch einen früheren Aufruf von allocate() oder allocate_at_least()(seit C++23) erhalten wurde.

Das Argument n muss gleich dem ersten Argument des Aufrufs von allocate() sein, der ursprünglich p erzeugt hat, oder im Bereich [mcount] liegen, wenn p von einem Aufruf von allocate_at_least(m) erhalten wurde, der {p, count} zurückgab(seit C++23); andernfalls ist das Verhalten undefiniert.

Ruft ::operator delete(void*) auf oder ::operator delete(void*, std::align_val_t)(seit C++17), aber es ist nicht spezifiziert, wann und wie er aufgerufen wird.

Bei der Auswertung eines konstanten Ausdrucks muss diese Funktion Speicher freigeben, der innerhalb der Auswertung desselben Ausdrucks zugewiesen wurde.

(seit C++20)

Inhalt

[bearbeiten] Parameter

p - Zeiger, der von allocate() oder allocate_at_least()(seit C++23) erhalten wurde.
n - Anzahl der Objekte, die zuvor an allocate() übergeben wurden, oder eine Zahl zwischen der angeforderten und der tatsächlich zugewiesenen Anzahl von Objekten über allocate_at_least() (kann gleich jeder Grenze sein)(seit C++23)

[bearbeiten] Rückgabewert

(keine)

[bearbeiten] Beispiel

#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'; }
}

Ausgabe

#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();

[bearbeiten] Siehe auch

alloziiert uninitialisierten Speicher
(public member function) [bearbeiten]
weist uninitialisierten Speicher zu, der mindestens so groß ist wie die angeforderte Größe
(public member function) [bearbeiten]
[static]
dealloziert Speicher mit dem Allocator
(public static member function of std::allocator_traits<Alloc>) [edit]