读书人

关于复制控制 copy control(operator=

发布时间: 2012-05-11 12:55:37 作者: rapoo

关于复制控制 copy control(operator=)

C/C++ code
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();}


为什么此处也调用了copy constructor,而不是operator=(const String & rhs),那么它是不是没有存在意义了?


[解决办法]
一般来说 类似
Type val=...
的,都是调用复制构造函数.
operator=是用在.
Type val;
...
val=...

读书人网 >C++

热点推荐