先贴代码:
class String
{
public:
String(const char* str = nullptr)//有参构造
{
assert(str != nullptr);
_str = new char[strlen(str) + 1];
strcpy(_str, str);
}
String(const String& s):_str(nullptr) //拷贝构造函数
{
_str = new char[strlen(s._str) + 1];
strcpy(_str, s._str);
}
String(String&& s) :_str(s._str)
{
s._str = nullptr;
}
String& operator = (const String& s)
{
if (this != &s)
{
delete[] _str;
_str = new char[strlen(s._str) + 1];
strcpy(_str, s._str);
}
return *this;
}
String& operator = (String s)
{
if (this != &s)
{
swap(_str, s._str);
}
return *this;
}
~String()
{
if (_str != nullptr)
{
delete[] _str;
_str = nullptr;
}
}
private:
char* _str;
};
代码必须有有参构造 拷贝构造 析构函数 以及等号运算符。其他重载版本可有可无。