std::inout_ptr_t<Smart,Pointer,Args...>:: operator Pointer*, std::inout_ptr_t<Smart,Pointer,Args...>:: operator void**
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Member functions | ||||
|
inout_ptr_t::operator Pointer*
inout_ptr_t::operator void**
|
||||
| Non-member functions | ||||
|
operator Pointer
*
(
)
const
noexcept
;
|
(1) | (C++23以降) |
|
operator
void
**
(
)
const
noexcept
;
|
(2) | (C++23以降) |
Pointer
または
void
*
オブジェクトのアドレスを外部関数に公開します。通常、この関数はその値が表す所有権を解放し、その後再初期化を行います。
Pointer
オブジェクトのアドレスに
*
this
を変換します。
Pointer
が
void
*
と同じ型でない場合にのみオーバーロード解決に参加し、
Pointer
がポインタ型でない場合、プログラムは不適格となる。
void * オブジェクトの初期値は、格納された
Pointer
オブジェクトの値を
void
*
に変換した値と等しく、これに対する変更は
デストラクタ
で使用される
Pointer
値に影響を与える。
*
this
の生存期間外で
void
*
オブジェクトにアクセスすると未定義動作となる。
inout_ptr_t
オブジェクトに対してこれら2つの変換関数のいずれかが呼び出された後、もう一方を同じオブジェクトに対して呼び出してはならない。そうでない場合、動作は未定義となる。
目次 |
パラメータ
(なし)
戻り値
Pointer
オブジェクトのアドレス。
注記
戻り値が指すオブジェクトが書き換えられていない場合、それは構築前の適応された
Smart
オブジェクトが保持していた値と等しい。
一般的な実装では、すべての
Pointer
型であるポインタのオブジェクト表現は
void
*
のオブジェクト表現と互換性があり、したがってこれらの実装では通常、
Pointer
オブジェクトのストレージ内に
void
*
オブジェクトを格納し、追加のストレージは必要ありません:
- 実装が型ベースのエイリアス解析( 厳格なエイリアシング規則 に依存する)を有効にする場合、適切にアラインされた std:: byte [ sizeof ( void * ) ] メンバー部分オブジェクトを使用でき、両方の変換関数は配列内で 暗黙的に作成されたオブジェクト のアドレスを返します。
-
それ以外の場合、
Pointerメンバー部分オブジェクトを両方の変換関数に使用でき、 (2) はそのアドレスを直接 reinterpret_cast して void ** として返すことができます。
Pointer
が、そのオブジェクト表現が
void
*
と互換性のないポインタ型である場合、
(1)
(または
(2)
)が呼び出されたかどうかを記録するために、追加の
bool
フラグが必要となる場合があります。
例
|
このセクションは不完全です
理由: 例がありません |