说我有此代码,它编译了。a2
之后,a1
持有什么范围?它仍然是a2
的有效参考吗?a1
是否占据不再可访问的内存?
class A
{
public:
void something();
};
void A::something()
{
}
A a1;
int main(void)
{
{
A a2;
a1 = a2;
}
a1.something();
}
使用 cop a1
的语句 a1 = a2;
copies a2
使用 copy cop sizhtment operation A
。
a2
不重要的事实并不重要:a1.something();
定义明确。
这里没有参考。
A2超出范围后A1保持什么?
什么都没有。它没有成员。
它仍然是对A2的有效参考?
不,从来没有。这是a2
的副本。
a1
是否占据不再可访问的内存?
否。但是,如果是A&
,那将是一个悬空的参考。