个人笔记,C++引用的使用

当同一个类实例化了类1和类2,如果用 类2 = 类1 进行复制,类2实际上不会改变自身的数据为类1,而是把类2指向的地址改为了类1的地址

这样就出现了一个问题

假设当我们使用new 或malloc分配了一段内存使用完后需要调用析构函数进行释放

你以为类1会调用~类1的析构函数 类2会调用~类2的析构函数

那就错了

因为类1和类2共同指向了类1 所以只有类1的析构函数会被调用 并且会被调用两次

这就照成了 类1的内存被释放了 ,然后类2指向了类1 又释放了一次 这就会出现错误

解决方法:
1.使用带对象参数的构造函数进行深拷贝

2.使用operator关键字重载 = 运算符 并且使用 引用接收对象参数

例:
operator =(Person1 &p)
{
delete[] this->m_Name;
this->m_Name=new char[sizeof(p.m_Name)+1];
strcpy(this->m_Name,p.m_Name);
this->are=p.are;
}

一定要使用引用方式接收参数,如果只是用Person1 p的话编译器会把栈内的地址指向已创建的对象地址,这样当我们的operator函数走完时,对象地址中的内容都会被系统回收掉

所以 我们要使用引用的方式来接收一个对象,告诉编译器,你不需要创建对象也不要直接指向对象的地址,防止你乱搞,你指向我们的中转地址,由我们的中转地址来访问p

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值