直接给出代码实现,所有需要注意的的点都在代码注释中给出
//string类模拟实现
class MyString
{
public:
//构造函数
//这里传递参数为char*字符串,因为如果传string的话,构造函数还没有实行,无法传递
MyString(const char* str)
{
//要进行判断是否为空
if (str == nullptr)
{
_data = new char[1];
*_data = '\0';
}
int len = strlen(str);
_data = new char[len + 1];
strcpy(_data, str);
}
//拷贝构造函数
MyString(const MyString& str)
{
int len = strlen(str._data);
_data = new char[len + 1];
strcpy(_data, str._data);
}
MyString& operator = (const MyString& str)
{
//因为在拷贝时需要释放原有资源,所以要对自拷贝进行额外处理
//如果两块指向同一个东西,就说明是一个东西
if (_data == str._data)
return *this;
else
{
delete[] _data;
int len = strlen(str);
_data = new char[len + 1];
strcpy(_data, str._data);
}
return *this;
}
~MyString()
{
delete[] _data;
_data = nullptr;
}
private:
char* _data;
};