转载自:https://blog.csdn.net/tianzez/article/details/79636250
class String {
public:
String(const char *str = ""); // 默认构造函数
String(const String& copy); // 拷贝构造函数
~String(); // 析构函数
String& operator = (const String& assign); // 赋值函数
private:
size_t m_size; // 当前当前长度
char *m_data; // 指向字符串的指针
};
// 构造函数
String::String(const char *str = NULL)
{
if (NULL == str) {
m_data = new char[1];
*m_data = '\0';
m_size = 0;
}else {
int length = strlen(str);
m_data = new char[length + 1];
strcpy(m_data, str);
m_size = length;
}
}
// 构造拷贝函数
String::String(const String& other){
size_t len = strlen(other.m_data);
m_data = new char[len + 1];
strcpy(m_data, other.m_data);
m_size = len;
}
// 析构函数
String::~String()
{
delete[]m_data;
}
// 赋值函数
String& String::operator=(const String& other)
{
if (this != &other) { //(1)检查自赋值
char* temp = new char[strlen(other.m_data) + 1]; //(2)分配新的内存资源,并复制内容
strcpy(temp, other.m_data);
delete[]m_data; //(3)释放原本的内存资源
m_data = temp;
m_size = strlen(other.m_data);
}
return *this; //(4)返回本对象的引用
}