#include <string.h> #include <iostream> using std::cout; using std::endl; class String { public: String()//显示定义无参构造函数 : _pstr(new char[1]()) { strcpy(_pstr,"0"); cout << "String()" << endl; } String(const char *pstr)//构造函数 : _pstr(new char[strlen(pstr)+ 1]()) { strcpy(_pstr,pstr); cout << "String(const char *pstr)" << endl; } String(const String & rhs)//拷贝构造函数 深拷贝 : _pstr(new char[strlen(rhs._pstr)+1]()) { strcpy(_pstr, rhs._pstr); cout << "String(const String &)" << endl; } String & operator=(const String & rhs)//赋值函数 { if(this != &rhs) {//判断是否是自复制 cout << "String & operator=(const String &)" << endl; delete [] _pstr;//回收左操作申请的空间 //再进行深拷贝 _pstr = new char[strlen(rhs._pstr) + 1](); strcpy(_pstr, rhs._pstr); } return *this; } ~String()//析构函数 { if(_pstr) delete [] _pstr; cout << "~String()" << endl; } void print() { printf("pstr = %p ", _pstr); cout << "pstr:" << _pstr << endl; } private: char * _pstr; };
为什么要使用 strlen(s) + 1?
在 C 语言中,字符串是以空字符做为终止标记(结束符)的。所以,C 语言字符串的最后一个字符一定是