1. 赋值运算符的重载函数的声明,需要返回类型的引用,也就是CMyString& ,这里是为了考虑到形如 a = b = c这样的连续赋值操作,因此需要在函数结束前加上return *this;
2. 函数传参需要引用,这样避免了调用一次拷贝构造函数提高效率,同时为了不改变传入实例,需要加上const
3. 重新分配内存时候,必须要释放之前自己已有的空间,否则会导致内存泄漏
4. 要考虑到自己赋值给自己,即this == &other时候,其实不需要执行任何操作,同时更为重要的是:对于我自己写的代码如果不加上if (this != &other)代码就是错的,因为我是先释放内存再根据other需要的空间开辟一块新空间,对于自己赋值给自己的情况,由于已经自己指向的那块空间已经释放了,所以再也找不到需要赋值的内容了。
#include <iostream> #include <cstring> using namespace std; class String { public: String(const char *s=nullptr);//自定义构造函数 String(const String &s1);//拷贝构造哈数 String &operator=(const String &s);//赋值构造函数 void print(); private: char *data; }; String::String(const char *s) { if(s==NULL) { data=new char[1]; data[0]='