我想了解以下代码中发生的情况
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()
。