C++ 浅层复制构造函数
2016-05-16 14:59
225 查看
1. 浅层复制构造函数
所有的复制构造函数均有一个参数,即对同一个类的对象的引用。A(A&a)
由于需要复制的对象一般不会更改,我们通常将引用定义为常量引用,这样构造函数就不用改变传递进来的对象。
A(const A&a)
这样函数就根据对象a来生成一个拷贝。这个a只是形式参数。它代表传递进来的对象。
编译器提供了默认构造函数和析构函数,同样也提供了复制构造函数,编译器提供的默认的复制构造函数只是把传递进来的
对象的每个成员变量复制到新对象的成员变量中去。然后两个对象中的变量均指向内存放类成员变量的内存区域。假如
该变量不是指针变量,一般不会出错,假如该变量是指针变量。
这样对象a有一个指针成员变量x,它指向存放6的那块内存区域,我们将对象a复制到对象b,如:
A b =(a);
由于要复制对象,因此自动调用默认复制构造函数,调用过程如下图所示。
首先将对象a作为参数传递到默认复制构造函数,调用过程如下。
首先将对象a作为参数传递到默认复制函数中,然后将对象a的指针成员变量X复制到对象b中,这样两个对象的指针X现在都指向同一内存区域。
当这两个对象中的任何一个超出作用域时,都会出现致命错误。比如我们将对象A删除,那么析构函数就会自动释放6的那块内存空间,而对象
b的指针变量x任然指向该空间,由于该空间已经不存在,那么对象b的指针变量x就变成一个野指针,该程序就处于崩溃的边缘。
相关文章推荐
- C语言笔记(八)
- 设计模式之策略模式(C++实现)
- C语言笔记(七)
- C语言笔记(六)
- 我的C++学习之路
- C++中字符串的库函数
- C语言笔记(五)
- C语言笔记(四)
- C语言笔记(三)
- C++11(九)
- C语言笔记(二)
- C语言笔记(一)
- 重新学习c++,开启人生新篇章
- VC++/MFC中DoModal
- VS2010进行远程调试C++
- C++第10/11周项目 继承与派生 【是春哥啊】(复习新版)
- C++第10/11周项目 继承与派生 【项目5 - 摩托车继承自行车和机动车】(复习新版)
- C++第10/11周项目 继承与派生 【项目4- 教师兼干部类】(复习新版)
- 深入理解内存对齐
- C++:实现split分割字符串