【c++程序】引用容易犯得错误

本文探讨了C++中构造函数的作用,特别是复制构造函数如何在函数调用中创建和销毁对象。通过一个具体例子展示了如何在func函数中创建对象并返回,以及返回的对象如何在使用后被销毁。重点解释了局部变量的作用域和生命周期。
#include<iostream>
using namespace std;
class A
{
public:
	A(int i){cout<<"执行构造函数创建一个对象\n";x=i;}
	A(A&a){x=a.x;cout<<"执行复制构造函数创建一个对象\n";}
	~A(){cout<<"执行析构函数!\n";}
	int get(){return x;}
private:
	int x;
};
A func()//去掉func前的&,输出23.变成了按值返回
{
	cout<<"跳转到func函数中!\n";
   A a(23);//由于对象a是一个局部变量,因此当func函数结束以后,局部变量a也被删除了。
   cout<<"对象a的地址:"<<&a<<endl;
   return a;//由于对象a消失了,所以func函数返回的其实是一个并不存在的对象的别名。
}
int main()
{
    A&r=func();//把并不存在的别名赋给r,因此这个对象的别名也不存在。
	cout<<"对象a的副本的地址:"<<&r<<endl;
	cout<<r.get()<<endl;//用这个不存在的对象来调用该对象的函数get
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值