#include <iostream>
#include<string.h>
#include<malloc.h>
using namespace std;
class Name
{
public:
Name(const char *myp)
{
m_len = strlen(myp);
m_p = (char *)malloc(m_len + 1);
strcpy(m_p, myp);
}
//手工编写拷贝构造函数,使用深拷贝
//另外开辟一块新内存
//避免出现同一块内存被释放两次的情况
Name(const Name& obj1)
{
m_len = obj1.m_len;
m_p = (char *)malloc(m_len + 1);
strcpy(m_p, obj1.m_p);
}
//实现 ‘=’ 号运算符重载
Name operator=(Name &obj1)
{
//1. 先释放旧的内存
if(this->m_p != NULL)
{
delete[] m_p;
m_len = 0;
}
//2. 根据0bj1分配内存大小
this->m_len = obj1.m_len;
this->m_p = new char[m_len + 1];
//把obj1赋值
strcpy(m_p, obj1.m_p);
return *this;
}
~Name()
{
if(m_p != NULL)
{
free(m_p);
m_len = 0;
}
}
private:
char *m_p;
int m_len;
};
void objplaymain()
{
Name obj1("abcdefg");
Name obj3("obj3");
//深拷贝实现
obj3 = obj1;
//obj3.operator(obj1)
}
int main()
{
objplaymain();
cout << "Hello world!" << endl;
return 0;
}
注意:1. 先释放旧的内存 2. 返回一个引用
c++ -> '=' 号运算符重载
最新推荐文章于 2024-06-26 23:25:33 发布