我想了解以下代码中发生的情况
struct A
{
vector<double> x;
};
void f(A &a)
{
vector<double> &y = a.x;
}
当函数 f 退出时, ax 被销毁了吗?提前致谢!
不a.x,不被破坏。您只是创建了一个本地引用a.x,然后函数退出 - 没有任何改变。您的代码实际上什么都不做。
请记住,引用不是对象。y是一个变量,但不是一个对象。它是对现有对象的引用a.x,但该对象本身不是范围的本地对象f。所以变量y在 结尾处超出范围f,但它所引用的对象没有。
在这种情况下,当您输入时,您f()会在本地创建一个独立y于世界其他地方a.x存在的引用。a当您离开f()本地创建的引用y时,它会超出范围并被销毁。世界其他地方都和你进入之前一样f()。