在代码中以注释的形式进行了讲解。
#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;
}