C++对象的赋值和复制
2017-11-09 12:37
796 查看
本文属于上篇博文《C++区别于其他语言的知识点总结》第13小节。
对象1 = 对象2;//浅拷贝 浅复制
//深拷贝 深复制
补充:深拷贝和浅拷贝的区别:
https://www.zhihu.com/question/36370072
对象的复制:用一个已有的对象快速地多个完全相同的对象。
//对象赋值:两个对象都已经存在,然后用一个对象给另一个对赋值
//对象复制:已经有一个对象,再创建另一个对象时,用已知的对象初始化创建对象
对象复制的一种形式:
对象复制的另一种形式:
两者区别:
对象的赋值是对一个已经存在的对象赋值,因此必须先定义被赋值的对象,才能进行对象的赋值。而对象的复制则是从无到有地建立一个新对象,并使它与一个已有的对象的完全相同(包括对象的结构和成员的值)。
//对象的复制,存在于实参到形参以及函数的返回中
13.对象的赋值和复制
对象的赋值:C++中对象可以使用”=”进行赋值,通过重载”=”号运算符实现,实际上这个过程是通过成员赋值(mewberwise copy)实现的,即将一个对象的成员一一赋值给另一对象的对应成员。注意:对象的赋值只是对其中数据成员的赋值,而不是对成员函数赋值。对象1 = 对象2;//浅拷贝 浅复制
Box *b1 = new Box(1, 2, 3); //C++类Java对象声明 必须使用指针 Box *b2; b1 = b2; //浅拷贝 delete b1; delete b2;//同一块地址 删了2次 Box b1 = Box(1, 2, 3); Box b2; b2 = b1;//位复制方式给b2赋值 想当于b1的内存完全copy给b1 //当这里给b2赋值时,回到时b2的p指针和b1的p指针指向同一个地方 即b1的p //当程序运行结束时,会导致同一个内存在各自的析构函数中释放,累计释放了2次。
//深拷贝 深复制
补充:深拷贝和浅拷贝的区别:
https://www.zhihu.com/question/36370072
对象的复制:用一个已有的对象快速地多个完全相同的对象。
//对象赋值:两个对象都已经存在,然后用一个对象给另一个对赋值
//对象复制:已经有一个对象,再创建另一个对象时,用已知的对象初始化创建对象
对象复制的一种形式:
Box box2(box1);//类名 对象2(对象1); //用对象1复制出对象2 建立对象时调用了一个特殊的构造函数——copy构造函数(copy constructor) //the copy constructor definition 详见课本101页 Box :: Box(const Box&b) { height = b.height; width = b.width; length = b.length; }
对象复制的另一种形式:
Box box2 = box1;//类名 对象1 = 对象2;
两者区别:
对象的赋值是对一个已经存在的对象赋值,因此必须先定义被赋值的对象,才能进行对象的赋值。而对象的复制则是从无到有地建立一个新对象,并使它与一个已有的对象的完全相同(包括对象的结构和成员的值)。
c3 = c1.complex_add(c2);//此处存在对象的赋值和复制问题
//对象的复制,存在于实参到形参以及函数的返回中
//实现机制实例 //重载=号实现对象赋值 Person& operator= (Person &s) { puts("oper"); if(this == &s) return s; char *t = new char[srelen(s.p) + 1]; strcpy(t, s.p); delete []p; p = t; return this*; } //Copy构造函数实现对象复制 Person (const Person& s) { puts("cp cntr"); p = new char[strlen(s.p) + 1]; strcpy(p, s.p); }
相关文章推荐
- C++中对象的赋值与复制操作详细解析
- C++中的对象的赋值和复制
- 浅谈C++中对象的复制与对象之间的相互赋值
- c++---对象的赋值和复制
- C++中的对象的赋值和复制
- c++ 对象的复制与赋值
- C++中的对象的赋值和复制
- C++中对象的赋值与复制操作详细解析
- C++中的对象的赋值和复制
- 不可或缺 Windows Native (19) - C++: 对象的动态创建和释放, 对象的赋值和复制, 静态属性和静态函数, 类模板
- C++:对象的赋值和复制
- C++对象的赋值和复制
- C++IO对象不可复制或赋值
- C++IO对象不可复制或赋值
- C++ 对象的赋值和复制 基本的
- C++中浅拷贝、深拷贝、对象的复制、对象的赋值
- C++ 对象相互赋值和复制
- C++IO对象不可复制或赋值
- 笔记:C++设计模式——适配器模式:对象适配器(复制自网络)
- python中的对象赋值(等号赋值、深复制、浅复制)