=运算符重载,重载函数有返回值,返回值为何为引用&形式

在代码中以注释的形式进行了讲解。

#include<iostream>
#include<string>
using namespace std;//=运算符重载

class myinter {
public:
	int* m_num;
public:
	myinter(int num) {
		m_num = new int(num);
	}
	~myinter() {
		if (m_num != NULL) {
           delete m_num;
		   m_num = NULL;
		}
	}
	myinter& operator=(myinter& inter) {
		if (m_num != NULL) {
			delete m_num;
			m_num = NULL;
		}
		this->m_num = new int(*inter.m_num);
		return *this;
	}
};
int main() {
	myinter inter1(10);
	myinter inter2(20);
	inter2 = inter1;
/*有返回值,如果重载函数返回值是引用&的形式,则返回的是inter2这个对象,
如果返回值不是引用的形式,那么这段代码返回的就是一个匿名对象。这段代码执行完以后,内存会被立即释放,但这个匿名对象与inter2共用一部分内存。
因此会导致在inter2销毁时释放内存时无内存可释放,造成程序崩溃。
但对于返回值是void的情况,这段代码就不会创建匿名对象,因此也就不会释放内存。不会出现程序崩溃的情况*/
	cout << *inter1.m_num << endl;
	cout << *(inter2.m_num) << endl;


	system("pause");
	return 0;
}

  • 13
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值