C++ 命名要求: 可擦除 (自 C++11 起)
來自 cppreference.com
指定一個給定 分配器 可以銷燬此型別的物件。
目錄 |
[編輯] 要求
給定以下型別、值和表示式
型別 | 定義 |
T
|
一個物件型別 |
A
|
一個分配器型別 |
X
|
一個滿足以下所有條件的容器型別
|
值 | 定義 |
m | 一個型別為 A 的左值 |
p | 一個型別為 T* 的指標 |
如果表示式 std::allocator_traits<A>::destroy(m, p) 形式良好,則 T
可以從 X
中 擦除。
[編輯] 注意
所有 標準庫容器 都要求它們的值型別滿足 可擦除。
對於預設分配器,此要求等同於 p->~T() 的有效性,它接受具有可訪問解構函式的類型別和所有標量型別,但拒絕陣列型別、函式型別、引用型別和 void。 |
(C++20 前) |
對於預設分配器,此要求等同於 std::destroy_at(p) 的有效性,它接受具有可訪問解構函式的類型別和所有標量型別,以及它們的陣列。 |
(C++20 起) |
儘管要求在使用自定義 destroy
銷燬 std::basic_string 的元素時使用自定義 destroy
,直到 C++23,所有實現都只使用預設機制。該要求透過 P1072R10 進行了更正,以匹配現有實踐。
[編輯] 缺陷報告
下列更改行為的缺陷報告追溯地應用於以前出版的 C++ 標準。
缺陷報告 | 應用於 | 釋出時的行為 | 正確的行為 |
---|---|---|---|
N3346 | C++11 | 沒有要求指定型別是否 其物件可以使用分配器銷燬 |
添加了要求 |
[編輯] 另請參閱
CopyInsertable(可複製插入) | |
MoveInsertable(可移動插入) | |
EmplaceConstructible(可就地構造) | |
Destructible(可析構) |