目录

4.2.5 深拷贝与浅拷贝(非常重要,视频P110)

相关教程


4.2.5 深拷贝与浅拷贝(非常重要,视频P110)

深浅拷贝是面试的经典问题。

  • 浅拷贝:简单的赋值拷贝操作。
  • 深拷贝:在堆区重新申请空间,进行拷贝操作。

浅拷贝、指针/引用 共用的时候,会出现错误。

如果利用编译器提供的拷贝构造函数,会做浅拷贝操作。

浅拷贝带来的问题就是堆区的内存重复释放

示例:

class Person
{
public:Person(){cout << "Person 无参默认构造函数调用" << endl;}Person(int a, int xheight){age = a;height = new int(xheight);cout << "Person 有参构造函数调用" << endl;}Person(const Person& p){age = p.age;//height = p.height;   // 运行会崩溃,因为堆区重复释放height = new int(*p.height);cout << "Person 拷贝构造函数调用" << endl;}~Person(){// 析构代码,将堆区开辟数据做释放操作if (height != NULL){delete height;height = NULL;}cout << "Person 析构函数调用" << endl;}int age;int* height;
};// 浅拷贝、深拷贝
void test01 ()
{Person p1(20, 175);cout << "p1的年龄: " << p1.age << "  p1的身高为:" << *p1.height << endl;Person p2(p1);cout << "p2的年龄: " << p2.age << "  p2的身高为:" << *p2.height << endl;
}int main() {test01();system("pause");return 0;
}
----------------------------------------------------------------------------------
Person 有参构造函数调用
p1的年龄: 20  p1的身高为:175
Person 拷贝构造函数调用
p2的年龄: 20  p2的身高为:175
Person 析构函数调用
Person 析构函数调用
请按任意键继续. . .

相关教程

  • 开发环境搭建:Visual Studio 2019 C++开发环境搭建
  • 推荐视频:https://www.bilibili.com/video/BV1et411b73Z?from=search&seid=4205594350351753444
  • 已投币三连,非常细致的视频教程,感谢up主。

c/c++教程 - 2.4.2.5 深拷贝和浅拷贝,堆区内存重复释放相关推荐

  1. python的super super easy教程 | 垃圾回收 引用计数 深拷贝和浅拷贝

    input最好是放在函数外面range(i)表示从0到(i-1)函数的作用:接收一个参数 返回一个参数python的内存管理 (常见的面试题)python的内存机制:以引用计数为主,分代回收,标记清除 ...

  2. P110中 深拷贝与浅拷贝问题

    #include<iostream> using namespace std; //深拷贝与浅拷贝//浅拷贝带来的问题就是堆区的内存重复释放,要用 深拷贝来解决 class Person ...

  3. 【黑马程序员 C++教程从0到1入门编程】【笔记4】C++核心编程(类和对象——封装、权限、对象的初始化和清理、构造函数、析构函数、深拷贝、浅拷贝、初始化列表、友元friend、运算符重载)

    黑马程序员C++教程 文章目录 4 类和对象(类属性[成员属性],类函数[成员函数]) 4.1 封装 4.1.1 封装的意义(三种权限:public公共.protected保护.private私有)( ...

  4. C++深拷贝与浅拷贝

    浅拷贝就是成员数据之间的一一赋值:把值赋给一一赋给要拷贝的值.但是可能会有这样的情况:对象还包含资源,这里的资源可以值堆资源,或者一个文件..当 值拷贝的时候,两个对象就有用共同的资源,同时对资源可以 ...

  5. 对象特性---->深拷贝与浅拷贝

    浅拷贝:简单的赋值拷贝操作. 深拷贝:在堆区申请一块空间,进行拷贝操作. 浅拷贝:编译器提供的拷贝构造函数对传入值进行赋值拷贝操作 #include<iostream> using nam ...

  6. c++深拷贝和浅拷贝

    C++中类的拷贝有两种:深拷贝,浅拷贝:当出现类的等号赋值时,即会调用拷贝函数 一:两个的区别 1 在未定义显示拷贝构造函数的情况下,系统会调用默认的拷贝函数--即浅拷贝,它能够完成成员的一一复制.当 ...

  7. 深拷贝与浅拷贝~动态内存释放有关

    浅拷贝就是对象的数据成员之间的简单赋值,如你设计了一个没有类而没有提供它的复制构造函数,当用该类的一个对象去给令一个对象赋值时所执行的过程就是浅拷贝,如: class A{ public: A(int ...

  8. 类和对象—对象特性—深拷贝与浅拷贝

    浅拷贝:简单的赋值拷贝操作 深拷贝:在堆区重新申请空间,进行拷贝操作 #include <iostream> using namespace std; class Person{publi ...

  9. C++ 深拷贝与浅拷贝

    #include<iostream> using namespace std; #include<string>class Person {public:Person() {c ...

最新文章

  1. mac上mysql关闭不了了_python操作mysql数据库
  2. linux xz 解压initrd.img,2016-8-28 linux基础学习——压缩解压缩及归档 while脚本
  3. android 版本控制
  4. php 配置文件加密工具类,SpringBoot集成Jasypt安全框架以及配置文件内容加密(代码示例)...
  5. 激光标记舱口轮廓生成_宣城国产圆管激光切割机-利晟激光
  6. 中国乙二醇型汽车防冻液市场运营能力分析与投资战略规划研究报告2022-2028年版
  7. i节点详解以及软连接和硬链接的区别
  8. 【AC自动机】病毒代码(ybtoj AC自动机-5)
  9. Oracle Class4. 数据库对象(同义词,序列,视图,索引,簇)
  10. win10调节屏幕亮度_Win8系统笔记本电脑如何调节屏幕亮度?
  11. linux如何做bond4,linux系统做bond
  12. C# 中XML序列化与反序列化学习笔记
  13. C#基础笔记(第十天)
  14. iOS集成支付宝H5支付实现跳转与回调的解决方案
  15. HP MSA2312 ERROR
  16. ajax请求实用的封装方法
  17. Arcgis实现路线等线方向箭头表示
  18. 控制pico—unity中双目摄像机的clearFlags问题
  19. c语言算摄氏温度和绝对温度,将华氏度转换为绝对温度C语言
  20. 使用计算机时按什么键打开,计算机进入BIOS的快捷键是什么|打开计算机以进入BIOS设置时按下的键...

热门文章

  1. Codeforces Round #198 (Div. 2)A,B题解
  2. IP地址在数据库里面的存储方式
  3. 微信页面设计 小总结
  4. 关于读《ajax后退解决方案(一)》笔记
  5. 网络协议从入门到底层原理(2)路由、网络常见概念(因特网, ISP, 接口, 上网方式)、公网私网、NAT
  6. 摘自缪雪峰的博客的JavaScript个人笔记(3)
  7. 【jQuery笔记Part4】02-jQuery微博案例
  8. 关于visio你必须要知道的一些小技巧
  9. 小程序入门学习04--数据绑定、条件渲染、列表渲染
  10. 计算机前置usb应用,电脑前置usb和后置usb的区别