关于复制控制 copy control(operator=)
char *mystrcpy(char *strDest, const char * strSrc){ if ( strDest == NULL || strSrc == NULL)return NULL ; if ( strDest == strSrc)return strDest ; char *tempptr = strDest ; while( *strDest++ = *strSrc++); return tempptr ;}class String{public: /*explicit*/ String(const char *str = NULL); // 通用构造函数 /*explicit*/ String(const String & another); // 拷贝构造函数 ~String(); // 析构函数 String & operator=(const String & rhs); // 赋值函数 char * c_str() const;private: char *m_data; // 用于保存字符串};String::String(const char *str){ cout<<"ctr:"<<hex<<this<<endl; if ( str == NULL ) //strlen在参数为NULL时会抛异常才会有这步判断 { m_data = new char[1] ; m_data[0] = '\0' ; } else { int len=strlen(str)+1; m_data = new char[len]; mystrcpy(m_data,str); }}String::String(const String &another){ cout<<"cpy ctr:"<<hex<<this<<endl; //char *str = another.c_str(); int len=strlen(another.m_data)+1; m_data = new char[len]; mystrcpy(m_data,another.m_data);}char * String::c_str() const{ return m_data;}String:: ~ String(){ cout<<"destructor:"<<hex<<this<<endl; delete []m_data;}String & String::operator=(const String & rhs){ cout<<"operator =:"<<hex<<this<<endl; if ( this == &rhs)return *this ; delete []m_data; /*char *str = rhs.c_str(); int len=strlen(str)+1; m_data = new char[len]; mystrcpy(m_data,str);*/ int len=strlen(rhs.m_data)+1; m_data = new char[len]; mystrcpy(m_data,rhs.m_data); return *this;}void func_test_str(){ String str("Hello中国"); cout<<str.c_str()<<"@"<<hex<<(unsigned int)str.c_str()<<endl; String str2(str); cout<<str2.c_str()<<"@"<<hex<<(unsigned int)str2.c_str()<<endl; String str3 = str.c_str(); cout<<str3.c_str()<<"@"<<hex<<(unsigned int)str3.c_str()<<endl; String str4 = str; /*为什么此处也调用了copy constructor,而不是operator=(const String & rhs),那么它是不是没有存在意义了?*/ cout<<str4.c_str()<<"@"<<hex<<(unsigned int)str4.c_str()<<endl;}int _tmain(int argc, _TCHAR* argv[]){ func_test_str(); getchar();}