std:: out_ptr
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Member functions | ||||
| Non-member functions | ||||
|
out_ptr
|
|
ヘッダーで定義
<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
は
-
Pointer、もしPointerが void 型でない場合。そうでなければ、 - 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_ptr
,
std::inout_ptr
|
202311L
|
(C++26) |
フリースタンディング
std::out_ptr
および
std::inout_ptr
|
例
std::out_ptr
を使用してスマートポインタを
sqlite3_open
に適応させます。この関数は出力パラメータとして
sqlite3**
を期待します。
#include <memory> #include <sqlite3.h> int main() { auto close_db = [](sqlite3* db) { sqlite3_close(db); }; { // メモリ内データベースを開き、その寿命をstd::unique_ptrで管理する std::unique_ptr<sqlite3, decltype(close_db)> up; sqlite3_open(":memory:", std::out_ptr(up)); sqlite3* db = up.get(); // dbを使用して何か処理を実行... } { // 上記と同じ処理をstd::shared_ptrで実行 std::shared_ptr<sqlite3> sp; sqlite3_open(":memory:", std::out_ptr(sp, close_db)); sqlite3* db = sp.get(); // dbを使用して何か処理を実行... } }
関連項目
|
(C++23)
|
関連するスマートポインタとリセット引数を持つ
inout_ptr_t
を作成する
(関数テンプレート) |
|
(C++14)
(C++20)
|
新しいオブジェクトを管理するユニークポインタを作成する
(関数テンプレート) |
|
新しいオブジェクトを管理する共有ポインタを作成する
(関数テンプレート) |