名稱空間
變體
操作

std::allocator<T>::deallocate

來自 cppreference.com
< cpp‎ | memory‎ | allocator
 
 
記憶體管理庫
(僅作說明*)
未初始化記憶體演算法
(C++17)
(C++17)
(C++17)
受約束的未初始化
記憶體演算法
C 庫

分配器
記憶體資源
垃圾回收支援
(C++11)(直到 C++23)
(C++11)(直到 C++23)
(C++11)(直到 C++23)
(C++11)(直到 C++23)
(C++11)(直到 C++23)
(C++11)(直到 C++23)
未初始化儲存
(直到 C++20*)
(直到 C++20*)
顯式生命週期管理
 
 
void deallocate( T* p, std::size_t n );
(C++20 起為 constexpr)

解分配指標 p 所引用的儲存,它必須是透過先前對 allocate()allocate_at_least()(C++23 起) 的呼叫所獲得的指標。

引數 n 必須等於最初產生 pallocate() 呼叫的第一個引數,或者如果 p 是從返回 {p, count}allocate_at_least(m) 呼叫獲得的,則在範圍 [mcount](C++23 起);否則行為未定義。

呼叫 ::operator delete(void*) ::operator delete(void*, std::align_val_t)(C++17 起),但未指定何時以及如何呼叫它。

在常量表達式求值中,此函式必須解分配在同一表示式求值中分配的儲存。

(C++20 起)

目錄

[編輯] 引數

p - - 從 allocate()allocate_at_least()(C++23 起) 獲得的指標
n - - 早前傳遞給 allocate() 的物件數量,或透過 allocate_at_least() 請求和實際分配的物件數量之間的一個數(可以等於任一邊界)(C++23 起)

[編輯] 返回值

(無)

[編輯] 示例

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

輸出

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

[編輯] 參閱

分配未初始化的儲存
(公開成員函式) [編輯]
分配至少與請求大小一樣大的未初始化儲存
(公開成員函式) [編輯]
[靜態]
使用分配器釋放儲存
std::allocator_traits<Alloc> 的公開靜態成員函式) [編輯]