博客
关于我
【C/C++学院】(6)构造函数/析构函数/拷贝构造函数/深copy浅copy
阅读量:796 次
发布时间:2023-02-24

本文共 853 字,大约阅读时间需要 2 分钟。

1. 构造函数

类的初始化即为构造函数,也称为隐式的初始化。构造函数在对象初始化时自动被调用,是一种隐式的调用。

构造函数主要分为三种:有参构造函数、无参构造函数和拷贝构造函数。有参构造函数的调用方式有括号法、等号法和手工法三种。

2. 析构函数

析构函数(destructor)与构造函数相反,当对象脱离其所在的函数(例如对象所在的函数已调用完毕)时,系统会自动执行析构函数。析构函数的主要作用是进行“清理善后”工作,例如在动态内存分配时,通过析构函数释放内存。

在主函数结束时,对象 stud1 和 stud2 会被“清理”,而清理的过程通过调用析构函数实现。

3. 拷贝构造函数

拷贝构造函数是一种特殊的构造函数,用于基于同一类的其他对象的构建及初始化。其形参必须是引用,通常加上 const 约束。拷贝构造函数的主要应用场景包括对象的值传递和返回。

当我们没有编写拷贝构造函数时,C++ 编译器会默认提供一个拷贝构造函数,执行浅拷贝操作。

拷贝构造函数的应用场景

  • 通过 = 运算符进行对象初始化

    当对象通过 = 运算符进行初始化时,会调用拷贝构造函数,执行浅拷贝操作。

  • 通过 拷贝构造函数符号()直接调用

    当使用 拷贝构造函数符号()直接初始化对象时,也会执行浅拷贝操作。

  • 对象以值传递方式传入函数参数

    当函数参数是对象时,会自动调用拷贝构造函数进行浅拷贝操作。

  • 对象以值传递方式从函数返回

    当函数返回对象时,会执行拷贝构造函数进行浅拷贝操作。

  • 深拷贝与浅拷贝

    在某些情况下,类内成员变量需要动态开辟内存。如果采用浅拷贝(即 A = B),则对象 A 和 B 共享同一块内存。如果 B 中有一个成员变量指针已经申请了内存,那么 A 中的那个成员变量也会指向同一块内存。这种情况下,当 B 的内存被释放时,A 的内存会变成野指针,可能导致程序运行错误。

    深拷贝和浅拷贝可以简单理解为:如果一个类拥有资源,当这个类的对象发生复制过程时,资源重新分配,这个过程就是深拷贝;而没有重新分配资源,就是浅拷贝。

    转载地址:http://avpfk.baihongyu.com/

    你可能感兴趣的文章
    OpenCV学堂 | CV开发者必须懂的9种距离度量方法,内含欧氏距离、切比雪夫距离等(建议收藏)
    查看>>
    OpenCV学堂 | OpenCV案例 | 基于轮廓分析对象提取
    查看>>
    OpenCV学堂 | YOLOv8与YOLO11自定义数据集迁移学习效果对比
    查看>>
    OpenCV学堂 | YOLOv8官方团队宣布YOLOv11 发布了
    查看>>
    OpenCV学堂 | YOLOv8实战 | 荧光显微镜细胞图像检测
    查看>>
    OpenCV学堂 | 汇总 | 深度学习图像去模糊技术与模型
    查看>>
    OpenCV安装
    查看>>
    OpenCV官方文档 理解k - means聚类
    查看>>
    opencv实现多路播放
    查看>>
    opencv常用函数
    查看>>
    OpenCV探索
    查看>>
    OpenCV添加中文(五)
    查看>>
    OpenCV点目标检测未找到所有目标,并且找到的圆圈偏移
    查看>>
    opencv特征提取1-Harris角点检测
    查看>>
    OpenCV环境搭建(一)
    查看>>
    OpenCV的视频读取
    查看>>
    openCV目标识别 目标跟踪 YOLO5深度学习 Python 计算机视觉 计算机毕业设计 源码下载
    查看>>
    opencv笔记(1):图像缩放
    查看>>
    opencv笔记(二十四)——得到轮廓之后找到凸包convex hull
    查看>>
    OpenCV计算点到直线的距离 数学法
    查看>>