说我有这段代码,它可以编译。 a1
超出范围后a2
持有什么?它仍然是对a2
的有效引用吗? a1
是否占用了不再可访问的内存?
class A
{
public:
void something();
};
void A::something()
{
}
A a1;
int main(void)
{
{
A a2;
a1 = a2;
}
a1.something();
}
答案 0 :(得分:6)
使用类a1 = a2;
的副本分配运算符将语句a2
复制 a1
到A
。 / p>
a2
超出范围的事实无关紧要:a1.something();
定义明确。
这里没有参考。
答案 1 :(得分:3)
a2超出范围后a1持有什么?
什么都没有。它没有成员。
它仍然是对a2的有效引用吗?
不,从来没有。它是a2
的副本。
a1
是否占用了无法访问的内存?
不。但是,如果它是A&
,那么它将是一个悬挂的引用。