1.给定一个数据类型,写它的赋值运算符重载函数:
例如:实现String
class MyString
{
public:
MyString(char *data = nullptr);
MyString(const MyString &str);
~MyString();
private:
char * myData;
};
MyString& MyString::operator =(const MyString &str) //赋值运算符
{
//关注点:1.需要返回引用,才能实现连续赋值 2.参数需要是常量引用,否则参数会调用一次复制构造函数
//3.需要释放掉实例原有的内存,否则会出现内存泄露
//4.如果传入的参数和实例相同,则无需赋值,直接返回即可
if (this != &str)
{
MyString temp(str); //通过临时变量实现赋值 ,局部变量自动释放内存//这样做的好处是万一碰到内存不够的场景,就直接退出函数报错了
//而普通的做法是先释放实例占用内存,再赋值,遇到内存不够的情况会导致原有的实例也丢失了。
char *pTemp = temp.myData;
temp.myData = myData;
myData = pTemp;
}
return *this;
}
例如:实现Vector