名前空間
変種
操作

std::out_ptr

From cppreference.com
< cpp‎ | memory‎ | out ptr t
 
 
メモリ管理ライブラリ
(説明用*)
未初期化メモリのアルゴリズム
(C++17)
(C++17)
(C++17)
制約付き未初期化
メモリアルゴリズム
Cライブラリ

アロケータ
メモリリソース
ガベージコレクションのサポート
(C++11)(C++23まで)
(C++11)(C++23まで)
(C++11)(C++23まで)
(C++11)(C++23まで)
(C++11)(C++23まで)
(C++11)(C++23まで)
未初期化ストレージ
(C++20まで*)
(C++20まで*)
明示的な生存期間管理
 
 
ヘッダ <memory> で定義
template< class Pointer = void, class Smart, class... Args >
auto out_ptr( Smart& s, Args&&... args );
(C++23から)

テンプレート引数を推論し、参照によってリセットするための引数をキャプチャするstd::out_ptr_tを返します。

戻り値の構築(下記参照)が不適格である場合、プログラムは不適格です。

目次

[編集] パラメータ

s - 適応するオブジェクト(通常はスマートポインタ)
args... - キャプチャするリセット用の引数

[編集] 戻り値

std::out_ptr_t<Smart, P, Args&&>(s, std::forward<Args>(args)...)、ここでP

  • Pointervoidと同一でない場合、Pointer。それ以外の場合、
  • Smart::pointerが有効で型を示す場合。それ以外の場合、
  • Smart::element_typeが有効で型を示す場合、Smart::element_type*。それ以外の場合、
  • std::pointer_traits<Smart>::element_type*.

[編集] 備考

ユーザーは、Pointer*を受け取る外部関数と連携するために、テンプレートパラメータPointerのテンプレート引数を指定できます。

リセットのためのすべての引数は参照によってキャプチャされるため、ぶら下がり参照を避けるために、返されるout_ptr_tは外部関数への呼び出しを含む完全式が終了する時点で破棄される一時オブジェクトであるべきです。

機能テストマクロ 規格 機能
__cpp_lib_out_ptr 202106L (C++23) std::out_ptrstd::inout_ptr
202311L (C++26) フリースタンディングなstd::out_ptrstd::inout_ptr

[編集]

sqlite3**を出力パラメータとして期待するsqlite3_openにスマートポインタを適応させるためにstd::out_ptrを使用します。

#include <memory>
#include <sqlite3.h>
 
int main()
{
    auto close_db = [](sqlite3* db) { sqlite3_close(db); };
 
    {
        // open an in-memory database, and manage its lifetime with std::unique_ptr
        std::unique_ptr<sqlite3, decltype(close_db)> up;
        sqlite3_open(":memory:", std::out_ptr(up));
 
        sqlite3* db = up.get();
        // do something with db ...
    }
    {
        // same as above, but use a std::shared_ptr
        std::shared_ptr<sqlite3> sp;
        sqlite3_open(":memory:", std::out_ptr(sp, close_db));
 
        sqlite3* db = sp.get();
        // do something with db ...
    }
}

[編集] 関連項目

(C++23)
関連付けられたスマートポインタとリセット引数を持つ inout_ptr_t を作成します
(関数テンプレート) [編集]
新しいオブジェクトを管理する一意のポインタを作成する
(関数テンプレート) [編集]
新しいオブジェクトを管理する共有ポインタを作成します
(関数テンプレート) [編集]
English 日本語 中文(简体) 中文(繁體)