最終更新日時(UTC): 2025年07月07日 09時03分31秒
Akira Takahashi が更新

履歴 編集

function
<memory_resource>

# std::pmr::null_memory_resource(C++17)

    namespace std::pmr {
      memory_resource* null_memory_resource() noexcept;
    }

## 概要

メモリの確保も解放も行わない`memory_resource`を取得する。

この関数によって取得された`memory_resource`は以下の特徴を持つ。

- `allocate()`の呼び出しは常に、`bad_alloc` 例外を投げる。
- `deallocate()` の呼び出しは何も行わない。

## 戻り値

静的記憶域期間に配置されている`memory_resource`実装のオブジェクトへのポインタを返す。

呼び出し時は常に同じポインタを返す。

## 例外

投げない。

## 備考

この関数で取得したポインタを`p`、その他任意の`memory_resource`オブジェクトを`r`とすると、`p->is_equal(r)`は`&r == p`を返す。

実装クラスの型名は未規定。

## 例

    #include <iostream>
    #include <memory_resource>

    int main()
    {
      auto* mr = std::pmr::null_memory_resource();
      std::pmr::polymorphic_allocator<int> alloc(mr);

      std::cout << mr << std::endl;
      std::cout << std::pmr::null_memory_resource() << std::endl;

      try {
        auto* p = mr->allocate(sizeof(int), alignof(int));
      }
      catch (const std::exception& except) {
        //必ずここを通る
        std::cout << except.what() << std::endl;
      }
    }

### 出力例（VS2019 Preview2）

    00007FFCB3396270
    00007FFCB3396270
    bad allocation

## バージョン

### 言語

- C++17

### 処理系

- Clang: ??
- GCC: 9.1 ✅
- Visual C++: 2017 update 6 ✅

## 関連項目

- `memory_resource`