最終更新日時: 2018年12月26日 17時29分13秒 (JST)
Akira Takahashi が更新

履歴 編集

function
<memory>

# std::allocator::max_size(C++17で非推奨)(C++20で削除)

    size_type max_size() const throw();  // C++03
    size_type max_size() const noexcept; // C++11

この関数は、C++17から非推奨となり、C++20で削除された。代わりに`std::allocator_traits::max_size()`関数を使用すること。

## 概要

一度に確保可能なメモリの最大サイズを取得する。

## 戻り値

`allocate(N, 0)`が成功するであろう最大の`N`を返す。

## 非推奨・削除の詳細

多くのメンバ関数は、アロケータの実装によらず、共通に定義できるものだった。そのため、アロケータの中間インタフェースである`std::allocator_traits`クラスに、共通のデフォルト実装を定義することとなった。

特殊なアロケータの実装では、この関数を独自に実装する必要があるかもしれない。その場合は`std::allocator_traits`のデフォルト機能を使用せずに、この関数を独自アロケータのインタフェースとして定義すれば、`std::allocator_traits`クラスを介してインタフェースにアクセスしたとしても、その独自実装が使用される。

少なくとも、`std::allocator`クラスのあらゆる標準ライブラリの実装において、この関数は特殊な動作をする必要がないため、`std::allocator_traits`クラスのデフォルト実装に任せることとなった。

## 例

    #include <iostream>
    #include <memory>

    int main()
    {
      std::allocator<int> alloc;

      std::cout << alloc.max_size() << std::endl;
    }

### 出力例

    4611686018427387903

## 参照

- P0174R2 Deprecating Vestigial Library Parts in C++17
- P0619R4 Reviewing deprecated facilities of C++17 for C++20