#include <iostream>
using namespace std;
class CMyString
{
private:
char* m_pDate;
public:
CMyString(char* pData = nullptr);
CMyString(const CMyString& str);
~CMyString(void);
CMyString & operator=(const CMyString & str);
};
//添加赋值运算=
// 初级写法
// 没有考虑 delete[] 可能会因为 m_Data之后new 没有空间而报错
/*
CMyString& CMyString::operator =(const CMyString& str)
{
if (this == &str)
{
return *this;
}
delete[] m_pDate;
m_pDate = nullptr;
m_pDate = new char[strlen(str.m_pDate) + 1];
strcpy(m_pDate, str.m_pDate);
return *this;
}
*/
//高级写法,考虑异常安全
// 创建一个临时对象,然后交换原和临时
//临时在{}结束后,析构而销毁
// 原里面存的就是参数
//??? 有个问题
//???CMyString tempStr = CMyString(str);
// ??? 题目里没有具体实现,直接用,可以吗
CMyString& CMyString::operator=(const CMyString& str)
{
if (this != &str) {
// 临时对象里 存的是 参数构成的对象
CMyString tempStr = CMyString(str);
// 开始交换
char* pTemp = tempStr.m_pDate;
tempStr.m_pDate = m_pDate;
m_pDate = pTemp;
}
return *this;
}
int main() {
system("pause");
return 0;
}