读书人

C++ 类中的《复制构函数》 的有关问题

发布时间: 2012-06-07 15:05:14 作者: rapoo

C++ 类中的《复制构函数》 的问题。求指点~

C/C++ code
class stringbad{private:    char * str;    int len;    static int num_strings;public:    stringbad(const char *s);    stringbad();    ~stringbad();    friend ostream & operator << (ostream & os, const stringbad & st);    stringbad(const stringbad &);};stringbad::stringbad(const char *s){    len = strlen(s);    str = new char[len + 1];    strcpy(str, s);    num_strings ++;    cout << num_strings << ": " << str << " object creaeted \n";    }stringbad::stringbad(){    len = 4;    str = new char [4];    strcpy(str, "C++");    num_strings ++;    cout << num_strings << ": " << str << " default object created \n" ;}/*我看的是C++ primer plus 第五版。看到十二章 类那,她说使用 深度复制 来解决 将一个对象 赋值 给另一个对象后, 释放一个对象的指针时,另一个对象不受其影响,就是这样定义 复制构造函数 就可以解决这个问题:stringbad :: stringbad(const stringbad & st){ num_strings++; len = st.len; str = new char[len +1]; strcpy(str, st.str); cout << …… ……; }我不明白 为什么这样定义就可以解决上述的问题。。。。 大家帮忙讲解一下。。谢谢啦。。。*/





[解决办法]
因为深度拷贝的复制构造函数内部重新new了新的地址“str = new char[len +1];”,用于存放深度复制的对象; 而浅拷贝只是使指针指向同一个对象的地址而已
[解决办法]
string a("hello");
string b = a; 这里会调用copy constructor,如果LZ认为这里是assign操作,请再将
copy constructor和operator =之间的差异再重新看看。

读书人网 >C++

热点推荐