一時オブジェクト
場合によってはコンパイラが一時オブジェクトを作成する必要があります。これらの一時オブジェクトは次の理由で作成できます :
初期化参照の基になる型はとは別の型の初期化子での const の参照を初期化します。
ユーザー定義型を返す関数の戻り値を格納します。これらの temporaries はプログラムがオブジェクトに戻り値をコピーした場合のみ作成されます。次に例を示します。
UDT Func1(); // Declare a function that returns a user-defined // type. ... Func1(); // Call Func1, but discard return value. // A temporary object is created to store the return // value.
戻り値が別のオブジェクトにコピーされるため一時的なオブジェクトが生成されます。temporaries が作成される一般的なケースはオーバーロードされた関数を呼び出す必要がある式の評価中になります。これらのオーバーロードされた関数が別のオブジェクトにコピーされるユーザー定義型を返します。
式 ComplexResult = Complex1 + Complex2 + Complex3 を検討してください。Complex1 + Complex2 式が評価され結果は一時オブジェクトに格納されます。次に 一時 + Complex3 式が評価され結果は ComplexResult にコピーされます (代入演算子としてはオーバーロード過ぎられません)。
キャストの結果をユーザー定義型に保存します。ユーザー定義型に指定した型のオブジェクトが明示的に変換すると新しいオブジェクトが一時オブジェクトとして作成されます。
一時オブジェクトが破棄される作成の点と点によって定義される有効期間があります。作成する式は複数の一時オブジェクトは作成した逆の順序でそれらを破棄します。破棄が発生した点を次の表に示します。
一時オブジェクトの破棄を参照
作成目的の一時 |
破棄のポイント |
---|---|
式の評価結果 |
式の評価結果として作成されたすべての temporaries は式ステートメントの最後にセミコロン ()または forifwhiledo と switch のステートメントの制御式の最後に破棄されます。 |
const の参照の初期化 |
初期化子が初期化参照が初期化子式と基になるオブジェクトオブジェクト型によって作成され初期化のと同じ型の左辺値である。この一時オブジェクトがバインドされているオブジェクト参照が破棄された直後に破棄されます。 |