一時オブジェクト

C++コンパイラーによる一時オブジェクトの作成が必要になる場合があります。 コンパイラーがこれらのオブジェクトを 使用するのは、参照を初期化するときや、標準型変換、引き数の受け渡し、関数からの戻り、 および throw 式の評価が含まれている式を評価するときです。

コンパイラーが参照変数の初期化のために一時オブジェクトを作成する場合、 一時オブジェクトの名前は、参照変数の名前と同じスコープを持ちます。 一時オブジェクトが、完全式 (別の式の副次式ではない式) の評価中に作成される場合、 一時オブジェクトは、それが作成されたポイントを字句として含んでいる評価の最終ステップとして破棄されます。

完全式の破棄には、例外が 2 つあります。

コンパイラーは、コンストラクターを用いてクラスの一時オブジェクトを作成する場合、 適切な (一致する) コンストラクターを呼び出して、一時オブジェクトを作成します。

一時オブジェクトが破棄され、デストラクターが存在すると、コンパイラーは、 そのデストラクターを呼び出して、一時オブジェクトを破棄します。 ユーザーが、一時オブジェクトが作成されたスコープから出るときに、 その一時オブジェクトが破棄されます。 参照が一時オブジェクトにバインドされている場合、一時オブジェクトが破棄されるのは、 完了前に制御の流れが中断されたために一時オブジェクトが破棄された場合以外では、 参照がスコープ外に出た場合です。 例えば、参照メンバー用にコンストラクター初期化指定子によって作成された 一時オブジェクトは、コンストラクターを離れるときに破棄されます。

そのような一時オブジェクトが冗長な場合は、コンパイラーは、 最適化されたより効率的なコードを作成するために、それらの一時オブジェクトを 構成しません。 プログラムをデバッグする場合、特にメモリー問題のデバッグにおいては、 この振る舞いを考慮に入れてください。

関連参照

IBM Copyright 2003