最終更新日時: 2023年01月24日 00時32分28秒 (JST)
yoh が更新

履歴 編集

class template
<memory>

# std::inout_ptr_t(C++23)

    namespace std {
      template<class Smart, class Pointer, class... Args>
      class inout_ptr_t;
    }

## 概要

2重ポインタ`T**`(=`Pointer*`)引数経由で既存リソースを解放してから新規確保リソースへのポインタを返すレガシーC関数に対して、取得されたポインタ値をスマートポインタに格納するアダプタクラス。 アダプタオブジェクトの生成には、`std::inout_ptr()`ヘルパ関数を利用する。

リソース占有管理セマンティクスを提供するC++標準スマートポインタ`std::unique_ptr`を始め、互換インタフェースをもつ任意のスマートポインタ型`Smart`を取り扱える。

プログラマは`inout_ptr_t`クラステンプレートの特殊化を定義してもよい。 このとき1つ以上のプログラム定義型に依存していれば、プライマリテンプレートにおける要件を満たす必要はない。

## テンプレートパラメータ制約

`Pointer`はCpp17NullablePointer要件を満たすこと

## 適格要件

`Smart`が`shared_ptr`の特殊化の場合、プログラムは不適格となる。

## メンバ関数

名前 | 説明 | 対応バージョン
--- | --- | ---
`(constructor)` | コンストラクタ | C++23
`(destructor)` | デストラクタ | C++23
`operator Pointer*()` | `Pointer*`への暗黙変換 | C++23
`operator void**()` | `void**`への暗黙変換 | C++23

## バージョン

### 言語

- C++23

### 処理系

- Clang: ??
- GCC: ??
- ICC: ??
- Visual C++: ??

## 関連項目

- `inout_ptr()`
- `unique_ptr`

## 参照

- P1132R8 out_ptr - a scalable output pointer abstraction