1

我想了解以下代码中发生的情况

struct A
{
  vector<double> x;
};

void f(A &a)
{
  vector<double> &y = a.x;
}

当函数 f 退出时, ax 被销毁了吗?提前致谢!

4

3 回答 3

4

a.x,不被破坏。您只是创建了一个本地引用a.x,然后函数退出 - 没有任何改变。您的代码实际上什么都不做。

于 2012-11-07T23:03:04.650 回答
4

请记住,引用不是对象。y是一个变量,但不是一个对象。它是对现有对象的引用a.x,但该对象本身不是范围的本地对象f。所以变量y在 结尾处超出范围f,但它所引用的对象没有。

于 2012-11-07T23:19:44.370 回答
3

在这种情况下,当您输入时,您f()会在本地创建一个独立y于世界其他地方a.x存在的引用。a当您离开f()本地创建的引用y时,它会超出范围并被销毁。世界其他地方都和你进入之前一样f()

于 2012-11-07T23:28:41.013 回答