かなり基本的な C++ の質問があります。いくつかの入力パラメーターを受け取り、std::string
それらのパラメーターから次のようなを作成する関数を考えてみましょう。
std::string constructString( int some_parameter ) {
std::stringstream ss;
// Construct a string (arbitrarily complex)
ss << "Some parameter is " << some_parameter << " right now";
return ss.str(); //Am I not returning a temporary object here?
}
stringstream
関数が戻るときにオブジェクトがスコープ外になることは理解していますが、それによって構築された文字列も無効になりませんか?
const char *
戻り値の型を に変更して返すとどうなりss.str().c_str()
ますか?
上記のようなコードは機能しているように見えますが、それは単に「一時」オブジェクトを含むメモリが使用時に別のものでまだ上書きされていないためではないでしょうか?
私は認めざるを得ませんが、一般的にそのような状況ではかなり混乱しています。誰かがこの「一時的なオブジェクト」全体を説明してくれれば (または、正しい方向に向けてくれれば) ありがたいです。