拷贝构造函数
来源:互联网 发布:徐志雷ti7知乎 编辑:程序博客网 时间:2024/04/30 16:19
类的拷贝构造函数
class Cexample
{
Cexample(const Cexample & c)
{
}
};
1.它是一个 构造函数!
2.第一个默认的参数必须是 Cexample & 形式的;
3.如果一个类中没有定义拷贝构造函数,那么编译器会自动产生一个默认的拷贝构造函数。
这个默认的参数可能为 X::X(const X&)或 X::X(X&),由编译器根据上下文决定选择哪一个。
作用:相同类的对象之间的 数值传递
应用地方:
1. 对象以值传递的方式传入函数参数
(1).对象传入形参时,会先会产生一个相同类的临时对象
(2).然后调用拷贝构造函数把对象的值给临时对象。
(3).等函数执行完后, 析构掉临时对象。
2.对象以值传递的方式从函数返回
Cexample fun(){}
函数值返回时首先产生一个临时对象,然后拷贝构造将返回值给临时对象,函数结束,析构掉临时对象
3. 对象需要通过另外一个对象进行初始化;
Cexample B(100); //构造B对象
Cexample A(B); 拷贝B到A
Cexample A=B; 拷贝B到A
浅拷贝和深拷贝:
当类的构造函数里面包括动态地址分配时候,拷贝构造函数要响应的添加动态地址分配的操作!!
在“深拷贝”的情况下,对于对象中动态成员,就不能仅仅简单地赋值了,而应该重新动态分配空间,如上面的例子就应该按照如下的方式进行处理:
- class Rect
- {
- public:
- Rect() // 构造函数,p指向堆中分配的一空间
- {
- p = new int(100);
- }
- Rect(const Rect& r)
- {
- width = r.width;
- height = r.height;
- p = new int; // 为新对象重新动态分配空间
- *p = *(r.p);
- }
- ~Rect() // 析构函数,释放动态分配的空间
- {
- if(p != NULL)
- {
- delete p;
- }
- }
- private:
- int width;
- int height;
- int *p; // 一指针成员
- };
此时,在完成对象的复制后,内存的一个大致情况如下:
此时rect1的p和rect2的p各自指向一段内存空间,但它们指向的空间具有相同的内容,这就是所谓的“深拷贝”
0 0
- 构造函数、拷贝构造函数
- 拷贝构造函数,构造函数
- 拷贝构造函数--默认拷贝构造函数
- 构造、拷贝构造函数基础
- 拷贝构造函数 深拷贝 浅拷贝
- 拷贝构造函数(深拷贝,浅拷贝)
- 拷贝构造函数浅拷贝深拷贝
- 拷贝构造函数,浅拷贝,深拷贝
- 拷贝构造函数 深拷贝 浅拷贝
- 拷贝构造函数----深拷贝、浅拷贝
- 拷贝构造函数
- 拷贝构造函数
- 浅析拷贝构造函数
- 拷贝构造函数
- 拷贝构造函数
- C++拷贝构造函数
- C++拷贝构造函数
- 拷贝构造函数
- 实现一种算法,打印n对括号的全部有效组合(即左右括号正确配对)
- poj 2449Remmarguts' Date uvaoj 10740 not the best dijkstra或spfa或bellman-ford k短路 A*
- 【english】1508 The Great Augus
- 三分钟理解“原型模式”——设计模式轻松掌握
- Mybatis学习笔记(一)入门例子
- 拷贝构造函数
- 初来咋到~~~
- 九度oj 1174
- Spring MVC Velocity模板引擎
- linux中信号量和互斥
- OpenStack开发环境选型(一)
- CSU 1642 Problem B
- Convolutional neural network
- Java集合概述Set、List、Map