什么时候必须写复制构造函数
2016-03-15 22:05
225 查看
什么时候必须写复制构造函数
首先,复制构造函数的调用只有在三种情况下才会进行,具体见上篇博客。由于复制构造函数的存在,所以有可能导致:1、函数的实参不等于形参;2、函数体中return语句的返回值与函数的返回值不相等。
既然自己写复制构造函数会导致如此多的麻烦事情,为何要自己写复制构造函数喃?这就涉及深拷贝和浅拷贝的问题了。
如果一个类中含有指针成员变量,则在利用一个已存在对象构造新的对象时,就会面临两种选择:深拷贝和浅拷贝。
浅拷贝:
对象A和对象B中指针成员变量指向同一个地址,就叫浅拷贝。带来的问题是,如果delet A时,对象B中指针变量指向的地址也丢失了。如果我们使用对象B给对象A初始化时,使用默认的复制构造函数进行对象A的初始化的话,就是所谓的浅拷贝。 所以此时,我们就需要自己写复制构造函数进行对象A的初始化。深拷贝:
对象A和对象B中指针成员变量指向不同的地址,但是两个地址对应的值是相同的。所以此时需要自己写的复制构造函数包括了对指针指向的内容拷贝。相关文章推荐
- HTTP第一篇:HTTP简介
- el表达式截取字符串
- 【转】关于时间复杂度的计算
- iOS 学习资料整理
- WYF的盒子
- 迟到的总结(四)--springmvc的系统学习之文件上传、ajax&json处理
- JVM性能调优
- C语言杂谈(一)scanf()、scanf_s()与错误 C4996
- Android课程---寄存器与存储器的区别
- 归并排序算法 递归及循环实现
- java对话框实现复制功能
- C++创建单链表
- Java整个编译以及运行的过程
- Linux-用户管理
- 这周心情起伏有点大。。。
- iOS如何获取网络图片(一)
- linux及安全《Linux内核设计与实现》第一章——20135227黄晓妍
- Linq 中查询一个表中指定的字段
- 排序算法——归并排序
- HashSet源码分析