我正在编写代码,我对引用&:
有疑问class A{
private:
int num;
public:
void set(const int& a){num = a;}
void foo(){
int a = 4;
set(a);
}
void print(){
cout << num << endl;
}
};
int main(){
A a;
a.foo();
a.print();
return 0;
}
在这种情况下,变量a
将在foo()
结束时销毁。 set
获取引用,以及a
的地址并更新num
。因此这段代码是错误的(num指向已删除的内存)?或者set
,使用值(不是地址)设置num?
我使用cout
地址a
和num
编辑代码,但它们不同,所以我认为num会复制{的值 {1}}。如果我运行代码,一切似乎都有效,但我不确定。
答案 0 :(得分:2)
您的代码无效,因为代码num = a
会获取a的副本。另外,在返回对象内存之前调用set()
,因此每个人都有一个副本,并且不会发生任何无效。另外,请记住,num
会在课程实例持续时持续,所以不要担心已删除的内存。