模拟实现C++中的string类:
传统版写法:拷贝构造+赋值运算符重载
class String
{
public:
String(const char* str = "")
{
if(str == nullptr)
{
assert(false);
return;
}
_str = new char[strlen(s._str)+1);
strcpy(_str,str);
}
String(const String& s):_str(new char[strlen(s._str)+1])
{
strcpy(_str,s._str);
}
String& operator=(const String& s)
{
if(this != &s)
{
char* pStr = new char[strlen(s._str) +1 ]);
strcpy(pStr,s._str);
delete[] _str;
_str = pStr;
}
return *this;
~String()
{
if(_str)
{
delete[] _str;
_str = nullptr;
}
}
}
private:
char *_str;
};
现代版本String写法 -----复用拷贝构造+交换的思想
class String
{
public:
String(const char* str = "")
{
if (str == nullptr)
str = "";
_str = new char[strlen(str) + 1];
strcpy(_str, str);
}
String(const String& s)
:_str(nullptr)
{
String tmp(s._str);
swap(_str,tmp._str);
}
String& operator=(String s)
{
swap(_str,s._str);
return *this;
}
~String()
{
if (_str != nullptr)
{
delete[] _str;
_str = nullptr;
}
}
private:
char* _str;
};