C++中深拷贝与浅拷贝区别
来源:互联网 发布:第章启航网络 编辑:程序博客网 时间:2024/05/29 16:29
1.需要使用拷贝构造函数的情况
(1)当用类的一个对象去初始化该类的另一个对象时;
(2)如果函数的形参是类的对象,调用函数时,进行形参和实参结合时;
(3)如果函数的返回值是类的对象,函数执行完成返回调用者时。
2.深拷贝与浅拷贝区别
(1)浅拷贝
如果在类中没有显示地声明一个拷贝构造函数,那么,编译器将自动会生成一个默认的拷贝构造函数,该拷贝构造函数完成对象之间的位拷贝,位拷贝也称为浅拷贝。
(2)深拷贝
在某些状况下,类内成员变量需要动态开辟内存堆内存,如果实现浅拷贝,也就是把对象里的值完全复制给另一个对象,如obj2=obj1,这时,如果obj2中有一个成员变量指针已经申请了内存,那么obj1中那个成员变量也指向同一块内存,这就出现了问题,当obj2把内存释放了(如调用了析构函数),这时obj1内的指针就是野指针,出现了运行错误。简而言之,如果一个类拥有资源,当这个类的对象发生复制过程的时候,资源重新分配,这个过程就是深拷贝,反之,没有重新分配资源,就是浅拷贝。
1 0
- C++中浅拷贝与深拷贝之间的区别
- C++中深拷贝与浅拷贝区别
- Python中深拷贝与浅拷贝的区别:
- Java中浅拷贝与深拷贝的区别
- js中深拷贝与浅拷贝的区别
- 深拷贝与浅拷贝的区别
- 浅拷贝与深拷贝区别
- C# 浅拷贝与深拷贝区别
- 深拷贝与浅拷贝的区别
- C# 浅拷贝与深拷贝区别
- 浅拷贝与深拷贝的区别
- 浅拷贝与深拷贝的区别
- 深拷贝与浅拷贝的区别
- 深拷贝与浅拷贝的区别
- 深拷贝与浅拷贝的区别
- C# 浅拷贝与深拷贝区别
- 深拷贝与浅拷贝的区别
- 深拷贝与浅拷贝的区别
- 6.5编程实例-立方体透视投影
- 20. Valid Parentheses
- 7.5.5编程实例-Bezier曲线曲面绘制
- 8.6.4编程实例-纹理映射
- 9.3.3编程实例-图形拾取
- C++中深拷贝与浅拷贝区别
- 10.4.3 编程实例-太阳系动画
- 关于百度定位申请应用AK的一些问题
- 已知网络地址查询MAC地址
- 新书《计算机图形学基础(OpenGL版)》PPT已发布
- excel 打开显示安装office自定义项 安装期间出错的解决方法
- handler机制的原理
- 数据包、着色规则和提示
- {Context} Setting property 'source' to 'org.eclipse.jst.jee.server:xxx' did not find a matching pro