前段时间有人发表了关于拷贝构造函数的问题,我觉得对于拷贝构造函数要掌握四点(以下以CCF代称拷贝构造函数)第一:默认CCF提供对象之间的位拷贝(Bitwise Copy),对于指针类成员只会将至指针值复制第二:CCF在对象初始化时才发挥作用,而在对象赋值的时候不起作用第三:在没有显示声明成员CCF的情况下,编译器会自动生成默认CCF,如果显示声明了显示CCF,则编译器不会生成默认CCF,至少是不会调用第四:与构造函数不同,CCF并不会递归的调用基类的CCF,子类与基类的CCF是覆盖关系,与就是说子类会寻找与自己关系最近的CCF调用,如果子类有CCF则仅调用子类CCF,如果子类没有向上寻找,调用第一个找到的CCF第五:CCF的声明及定义如下:
而具体到第二点,CCF在以下情况下也会被调用: 1) 一个对象以值传递的方式传入函数体; 2) 一个对象以值传递的方式从函数返回; 3) 一个对象需要通过另外一个对象进行初始化;除此之外,对于对象复制是我们经常会忽略或混淆的一点,在对赋值的时候不会调用CCF,需要自己去重载“=”注意:对于包含动态分配成员的类提供拷贝构造函数和重载"="赋值操作符号是一个良好的编程习惯。愿意如下:动态成员如指针,在默认CCF和默认“=”操作符下仅仅执行位拷贝,而指针所指向的内存区域不会被拷贝,造成内存错误操作以下例程可用来实验:
posted on 2008-12-05 23:19 pear_li 阅读(3909) 评论(12) 编辑 收藏 引用 所属分类: C++