polymorphic_allocator() noexcept; //(1)
polymorphic_allocator(memory_resource* r); //(2)
polymorphic_allocator(const polymorphic_allocator& other) = default; //(3)
template <class U>
polymorphic_allocator(const polymorphic_allocator<U>& other) noexcept; //(4)
概要
- (1) : デフォルトコンストラクタ
- (2) :
memory_resource
オブジェクトのポインタを受けて構築 - (3) : コピーコンストラクタ
- (4) :
value_type
に変換可能なU
のpolymorphic_allocator
からのコピー構築
要件
- (2) :
r
がnullでないこと
引数
r
-- 任意のmemory_resource
へのポインタother
-- コピーする他のpolymorphic_allocator
オブジェクト
効果
- (1) :
get_default_resource()
からデフォルトのmemory_resource
を取得して構築 - (2) :
r
をmemory_resource
として構築 - (3)(4) :
other.resource()
からmemory_resource
を取得して構築
例外
- (1)(4) : 投げない
備考
どのコンストラクタからの初期化においても、取得するmemory_resource
の所有権を保持しない。
例
#include <memory_resource>
int main() {
//(1) デフォルト構築
{
std::pmr::polymorphic_allocator<int> alloc{};
}
//(2) memory_resourceを受けて構築
{
auto* rs = std::pmr::null_memory_resource();
std::pmr::polymorphic_allocator<int> alloc{rs};
}
//(3) 同じ型のpolymorphic_allocatorからコピー構築
{
std::pmr::polymorphic_allocator<int> alloc1{};
std::pmr::polymorphic_allocator<int> alloc{alloc1};
}
//(4) 変換可能な型のpolymorphic_allocatorからコピー構築
{
std::pmr::polymorphic_allocator<short> alloc1{};
std::pmr::polymorphic_allocator<int> alloc{alloc1};
}
}
出力
バージョン
言語
- C++17
処理系
- Clang: ??
- GCC: 9.1 ✅
- Visual C++: 2017 update 6 ✅