- ベストアンサー
一時オブジェクト?の生存期間
CTestというクラスがあって そのクラスにはCTest(const char* a)というコンストラクタがあり bool operator==( const CTest& a )演算子を定義していた場合の話ですが CTest test; bool b = test == CTest("aaa"); このような記述は問題ないのでしょうか? CTest("aaa")は生成されてすぐ廃棄されるかと思いますが この CTest("aaa")の生存期間を知りたいのです。 VC8では問題なく CTest(const char* a) → bool operator==( const CTest& a ) → CTest("aaa");のデストラクタ という順で実行されたのですが、 この場合のCTest("aaa")のデストラクタがいつ呼ばれるかというのはC++の規格で決まっているのでしょうか? C++の初歩的な事かもしれませんが 宜しくお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
問題ないです。 一時オブジェクトは式の評価が完了するまで存在することが保証されています。 >bool b = test == CTest("aaa"); 一時オブジェクト "CTest("aaa")"は、testと比較されその結果でbが初期化されるまで存在します。そして式の評価が終わった後にデストラクタが呼出され破棄されます。
その他の回答 (1)
- jacta
- ベストアンサー率26% (845/3158)
回答No.2
> この場合のCTest("aaa")のデストラクタがいつ呼ばれるかというのはC++の規格で決まっているのでしょうか? 文の終わりですね。 C++では宣言も文ですので、今回の場合は問題ありません。
質問者
お礼
ご回答有り難うございます。勉強になりました。
お礼
ご回答有り難うございます。大変参考になりました。