最終更新日時: 2025年07月10日 10時26分30秒 (JST)
Koichi Murase が更新

履歴 編集

function
<memory_resource>

# std::pmr::polymorphic_allocator::コンストラクタ(C++17)

    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 ✅

## 参照

- P0220R1 Adopt Library Fundamentals V1 TS Components for C++17 (R1)
- P0337r0 | Delete operator= for polymorphic_allocator
- Working Draft, C++ Extensions for Library Fundamentals, Version 2