首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

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

2012-06-07 
C++ 类中的《复制构函数》 的问题。求指点~C/C++ codeclass stringbad{private:char * strint lenstatic in

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 =之间的差异再重新看看。

热点排行