更改超出范围的变量引用

时间:2019-05-03 09:22:32

标签: c++

说我有这段代码,它可以编译。 a1超出范围后a2持有什么?它仍然是对a2的有效引用吗? a1是否占用了不再可访问的内存?

class A
{
  public:
  void something();
};

void A::something()
{

}

A a1;

int main(void)
{
  {
    A a2;
    a1 = a2;
  }
  a1.something();
}

2 个答案:

答案 0 :(得分:6)

使用类a1 = a2;副本分配运算符将语句a2 复制 a1A。 / p>

a2超出范围的事实无关紧要:a1.something();定义明确。

这里没有参考。

答案 1 :(得分:3)

  

a2超出范围后a1持有什么?

什么都没有。它没有成员。

  

它仍然是对a2的有效引用吗?

不,从来没有。它是a2的副本。

  

a1是否占用了无法访问的内存?

不。但是,如果它是A&,那么它将是一个悬挂的引用。