我想了解以下代码中发生的事情
struct A
{
vector<double> x;
};
void f(A &a)
{
vector<double> &y = a.x;
}
当函数f退出时,a.x被破坏了吗?提前谢谢!
答案 0 :(得分:4)
没有a.x
没有被销毁。您只是创建了对a.x
的本地引用,然后函数退出 - 没有任何更改。你的代码实际上什么都不做。
答案 1 :(得分:4)
请记住,引用不是对象。 y
是变量,但不是对象。它是对现有对象a.x
的引用,但该对象本身不是f
范围的本地对象。因此变量y
超出f
末尾的范围,但它引用的对象不会。
答案 2 :(得分:3)
在这种情况下,当您输入f()
时,您会在本地创建一个y
到[{1}}的引用,该引用独立于a.x
和世界其他地方。当您离开a
时,本地创建的引用f()
超出范围并被销毁。世界其他地方保持原样,直到您输入y
。