は、次のコード例を考えてみましょう:呼び出し先が返すオブジェクトのスコープ。呼び出し元ローカル変数?
SomeClass Callee() {
// Option 1:
return SomeClass(/* initializer here */);
// Option 2:
SomeClass tmp(/* initializer here */);
// Do something to tmp here
return tmp;
}
void Caller() {
SomeClass a(/* initializer here */);
SomeClass b = Callee();
SomeClass c(/* initializer here */);
}
私の知る限り、b
はa
よりも長く、上記の例では長いc
以上住んでいるが、しません。
Callee()
の戻り値がCaller()
の変数に割り当てられていないとどうなりますか?上の例で返されたオブジェクトはb
のように振舞うでしょうか?または、それはc
が作成される前に破壊されますか?私はそれが後者だと思う、確かにしたい。
コード例は次のとおりです。
void Caller() {
SomeClass a(/* initializer here */);
Callee(); // what is the scope for the object returned by it?
SomeClass c(/* initializer here */);
}
この質問は不明です。関数には2つのオプションがありますが、後でそれらを参照することはありません。また、私は最後の文を理解していません。私は言い換えられるべき質問を提案する。 – SergeyA
オブジェクトにはスコープがありません。彼らには生涯があります。名前にはスコープがあります。 –