マルチスレッド環境。Fooのコンテンツはマルチスレッドにすることができます。
class Foo
{
public:
const A & getA() {return a_;} //has guard
void setA(A newA){a_ = newA;} //has guard
private:
A a_;
};
発信者:
A a = foo.getA();
私が誰かに尋ねた別の質問では、 const&を返すと、変数の寿命が参照の寿命まで延長されることが保証されている ので、これによれば、値をコピーする必要はなく、setAを呼び出しても安全ですgetAを呼び出した直後にfooが実行されましたが、それに対する多くの議論が提起されたため、これは正しくないと感じています。
安全を確保したいので、署名を次のように変更します。
A & getA() {return a_;}
しかし、コンパイラは、ローカル変数への参照があることを警告します。私が理解している限り(cppの新機能)、戻り値はfoo.aのコピーであるため、理由がわかりません。これの問題は何ですか?
a_contentの変更は気になりません。(_ a.age = 4)。設定するための呼び出しが心配で、呼び出し元の「a」が違法になることを心配しています