多线程环境。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 也是安全的foo 在我调用 getA 后立即完成,但是提出了很多反对它的论点,所以我觉得这是不正确的。
我想安全起见,所以我将签名更改为:
A & getA() {return a_;}
但是编译器仍然给我警告说我引用了局部变量。我不明白为什么,因为据我了解(cpp 新手)返回值是 foo.a 的副本,那么这有什么问题呢?
我不担心 a_ 内容的变化。(_a.age =4) 。我担心呼叫设置并且我在呼叫者中的“a”将是非法的