class myString
{
public:
myString(const char *str = nullptr) {
data = new char[strlen(str) + 1];
strcpy(data, str);
}
myString(const myString &str) {
if (this != &str)// 和自己比较
{
// 深拷贝,重新申请空间
data = new char[strlen(str.data) + 1];
strcpy(data, str.data);
}
}
// 只有返回引用才能连续赋值
myString& operator=(const myString& str) {
if (this != &str)
{
// 先对打算修改的对象生成一个副本(copy),在副本上做必要的修改。
// 如果生成副本时出现任何异常,原对象依然能保证不变。
myString tmp(str);
swap(data, tmp.data);
return *this;
}
}
~myString() {
delete[] data;
}
private:
char *data;
};