C++对象的“深拷贝”和“浅拷贝”

用户头像
来自上海海洋大学-苏羊快才让发布于:2020-04-26 10:21:39
C++中对象的复制就如同“*”,用一个已有的对象快速地复制出多个完全相同的对象。一般而言,以下三种情况都会使用到对象的复制: (1)建立一个新对象,并用另一个同类的已有对象对新对象进行初始化,例如: class Rect { private: int width; int height; }; Rect rect1; Rect rect2(rect1); // 使用rect1初始化rect2,此时会进行对象的复制 (2)当函数的参数为类的对象时,这时调用此函数时使用的是值传递,也会产生对象的复制,例如: void fun1(Rect rect) { ... } int main() { Rect rect1; fun1(rect1); // 此时会进行对象的复制 return 0; } (3)函数的返回值是类的对象时,在函数调用结束时,需要将函数中的对象复制一个临时对象并传给改函数的调用处,例如: Rect fun2() { Rect rect; return rect; } int main() { Rect rect1; rect1=fun2(); // 在fun2返回对象时,会执行对象复制,复制出一临时对象, // 然后将此临时对象“赋值”给rect1 return 0; } 对象的复制都是通过一种特殊的构造函数来完成的,这种特殊的构造函数就是拷贝构造函数(copy constructor,也叫复制构造函数)。拷贝构造函数在大多数情况下都很简单,甚至在我们都不知道它存在的情况下也能很好发挥作用,但是在一些特殊情况下,特别是在对象里有动态成员的时候,就需要我们特别小心地处理拷贝构造函数了。
点赞 (1) 回复
1F 用户头像
来自上海海洋大学-王志成发布于:2020-07-20 17:40:36

学到了学到了

加载更多
点击图片
取消
回复
2F 用户头像
来自上海海洋大学-张雨晴发布于:2020-07-20 17:52:40
拷贝构造函数在大多数情况下都很简单,甚至在我们都不知道它存在的情况下也能很好发挥作用,但是在一些特殊情况下,特别是在对象里有动态成员的时候,就需要我们特别小心地处理拷贝构造函数了。
加载更多
点击图片
取消
回复
3F 用户头像
来自上海海洋大学-蔡昳卓发布于:2020-07-20 17:56:33

很有用

加载更多
点击图片
取消
回复
4F 用户头像
来自上海海洋大学-柏彦阳发布于:2020-07-20 17:57:02
讲的很清晰
加载更多
点击图片
取消
回复
5F 用户头像
来自上海海洋大学-姚慧杰发布于:2020-07-20 18:00:40

成员中没有指针时浅拷贝足够了,有指针时为了避免指针悬挂,采用深拷贝

加载更多
点击图片
取消
回复
6F 用户头像
来自上海海洋大学-张雨晴发布于:2020-07-20 18:08:28
成员中没有指针时浅拷贝足够了,有指针时为了避免指针悬挂,采用深拷贝
加载更多
点击图片
取消
回复
7F 用户头像
来自上海海洋大学-孙杨博发布于:2020-07-20 18:47:23

偶尔想起老师问的横拷贝与竖拷贝的区别。。。。

加载更多
点击图片
取消
回复
8F 用户头像
来自上海海洋大学-张海发布于:2020-07-20 18:54:24

学习了

加载更多
点击图片
取消
回复
9F 用户头像
来自上海海洋大学-陈泓儒发布于:2020-07-20 19:19:10

讲得很好。

加载更多
点击图片
取消
回复
10F 用户头像
来自上海海洋大学-生蕙语发布于:2020-07-20 20:50:15
学到了
加载更多
点击图片
取消
回复
11F 用户头像
来自上海海洋大学-李佳杭发布于:2020-07-20 20:50:24
感谢分享
加载更多
点击图片
取消
回复
发布回复
点击图片