std::pmr::polymorphic_allocator
| ヘッダ <memory_resource> で定義 |
||
template< class T > class polymorphic_allocator; |
(C++17以降) (C++20まで) |
|
| template< class T = std::byte > class polymorphic_allocator; |
(C++20以降) | |
クラステンプレート std::pmr::polymorphic_allocator は、それが構築されたstd::pmr::memory_resourceに応じて異なるアロケーション動作を示すAllocatorです。memory_resource は実行時多態を使用してアロケーションを管理するため、静的なアロケータ型として polymorphic_allocator を持つ異なるコンテナインスタンスは相互運用可能ですが、異なるアロケータ型を持っているかのように振る舞うことができます。
polymorphic_allocator のすべての特殊化は、アロケータ完全性要件を満たします。
polymorphic_allocator::construct メンバ関数は、アロケータを使用する構築を実行するため、polymorphic_allocator を使用するコンテナの要素は、自身の割り当てに同じアロケータを使用します。例えば、std::pmr::vector<std::pmr::string> は、vector のストレージと各 string のストレージに同じ memory_resource を使用します。
非多態的なアロケータの場合、同様の伝播はstd::scoped_allocator_adaptorの助けを借りて実現できます。
目次 |
[編集] メンバ型
| メンバ型 | 定義 |
value_type
|
T
|
[編集] メンバ関数
polymorphic_allocator を構築する(公開メンバ関数) | |
| (デストラクタ) (暗黙的に宣言) |
暗黙的に宣言されたデストラクタ (公開メンバ関数) |
| operator= [削除] |
コピー代入演算子は削除されている (公開メンバ関数) |
公開メンバ関数 | |
| メモリを割り当てる (公開メンバ関数) | |
| メモリを解放する (公開メンバ関数) | |
| 割り当てられたストレージにオブジェクトを構築する (公開メンバ関数) | |
| (C++20で非推奨)(C++26で非推奨解除) |
割り当てられたストレージ内のオブジェクトを破棄する (公開メンバ関数) |
| (C++20) |
基盤となるリソースから生の整列されたメモリを割り当てる (公開メンバ関数) |
| (C++20) |
allocate_bytes から取得した生メモリを解放する(公開メンバ関数) |
| (C++20) |
オブジェクトまたは配列に適した生メモリを割り当てる (公開メンバ関数) |
| (C++20) |
allocate_object によって取得された生メモリを解放する(公開メンバ関数) |
| (C++20) |
オブジェクトを割り当てて構築する (公開メンバ関数) |
| (C++20) |
オブジェクトを破棄して解放する (公開メンバ関数) |
コンテナのコピーコンストラクタで使用するための新しい polymorphic_allocator を作成する(公開メンバ関数) | |
| 基盤となるメモリリソースへのポインタを返す (公開メンバ関数) | |
[編集] 非メンバ関数
| (C++20で削除) |
2つの polymorphic_allocator を比較する(関数) |
[編集] 備考
polymorphic_allocator は、コンテナのコピー代入、ムーブ代入、またはスワップでは伝播しません。その結果、polymorphic_allocator を使用するコンテナのムーブ代入は例外を投げる可能性があり、アロケータが等しくないと比較される2つの polymorphic_allocator を使用するコンテナのスワップは未定義の動作を引き起こします。
| 機能テストマクロ | 値 | 規格 | 機能 |
|---|---|---|---|
__cpp_lib_polymorphic_allocator |
201902L |
(C++20) | 語彙型としての std::pmr::polymorphic_allocator<> |
[編集] 関連項目
| (C++17) |
メモリリソースをカプセル化するクラスのための抽象インターフェース (クラス) |