名前空間
変種
操作

std::out_ptr_t<Smart,Pointer,Args...>::operator Pointer*, std::out_ptr_t<Smart,Pointer,Args...>::operator void**

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まで*)
明示的な生存期間管理
 
std::out_ptr_t
メンバ関数
out_ptr_t::operator Pointer*out_ptr_t::operator void**
非メンバ関数
 
operator Pointer*() const noexcept;
(1) (C++23から)
operator void**() const noexcept;
(2) (C++23から)

外部関数に、一般的に再初期化されるPointerまたはvoid*オブジェクトのアドレスを公開します。

1) *this を、格納されているPointerオブジェクトのアドレスに変換します。
2) *this を、void* オブジェクトのアドレスに変換します。この変換関数は、Pointervoid*と異なり、かつプログラムがPointerがポインタ型でない場合に不定形であれば、オーバーロード解決に参加します。
void* オブジェクトの初期値は、void* に変換された格納されているPointerオブジェクトの値に等しく、それへのいかなる変更もデストラクタで使用されるPointer値に影響します。void* オブジェクトを、*this の生存期間外でアクセスすると、未定義の動作となります。

これらの2つの変換関数のいずれかがout_ptr_tオブジェクトに対して呼び出されると、もう一方は呼び出されるべきではありません。それ以外の場合は、動作は未定義です。

目次

[編集] パラメータ

(なし)

[編集] 戻り値

1) 格納されているPointerオブジェクトのアドレス。
2) 前述の要件を満たすvoid*オブジェクトのアドレス。

[編集] 注釈

戻り値が指すオブジェクトが書き換えられていない場合、それはnullptrに等しくなります。

一般的な実装では、ポインタ型であるすべてのPointerのオブジェクト表現はvoid*のオブジェクト表現と互換性があり、したがってこれらの実装は通常、Pointerオブジェクトのストレージ内にvoid*オブジェクトを格納し、追加のストレージは不要です。

  • 実装が型ベースのエイリアス解析(厳密エイリアス規則に依存)を有効にしている場合、適切にアライメントされたstd::byte[sizeof(void*)]メンバサブオブジェクトが使用される可能性があり、両方の変換関数は、配列内に暗黙的に作成されたオブジェクトのアドレスを返します。
  • それ以外の場合、Pointerメンバサブオブジェクトが両方の変換関数に使用される可能性があり、(2) は直接そのアドレスをvoid**reinterpret_castして返す可能性があります。

Pointervoid*のオブジェクト表現と互換性のないポインタ型である場合、(1)(または(2))が呼び出されたかどうかを記録するために、追加のboolフラグが必要になる可能性があります。

[編集]

English 日本語 中文(简体) 中文(繁體)