构造函数与析构函数详解[通俗易懂]

构造函数与析构函数详解

大家好,又见面了,我是全栈君。

C++是一门面向对象编程的编程语言,这个相信大家都是了解的。为何是面向对象编程呢?主要就是因为这种数据类型的存在,那么类到底是如何生成以及释放的呢?那么就可以引入我们熟悉的构造函数以及析构函数了。

构造函数

构造函数可以分为:无参构造函数、有参构造函数、拷贝构造函数;这三种构造函数在我们定义一个类的时候,如果我们并没有自定义构造函数,那么编译器会自动为我们生成两个构造函数(无参构造函数、拷贝构造函数)。
如果自定义了无参构造函数,那么系统就不在自动提供无参构造函数了,但是拷贝构造函数还是会提供的,除非拷贝构造函数你也进行了自定义。

对于无参构造函数的自动生成呢?还需要注意一点就是:如果自定义了有参构造函数,那么编译器就不会再为你自动提供无参构造函数了。但还是会提供拷贝构造函数,除非也自定义了。

拷贝构造函数:默认是浅拷贝,什么是浅拷贝呢?
浅拷贝就是,当你定义的类中存在指针变量的时候,指针变量指向的内存空间直接也赋值给了另外一个拷贝出来的对象的指针了。那么就会存在两个指针变量同时指向同一个内存空间的情况了,这样子会发生什么问题呢?

主要就是,当你在进行析构函数调用的使用,释放指针变量指向的堆区变量的时候,第一个对象进行了释放,第二个对象也是对同一个堆区变量进行释放,因为已经释放了,所以会出现问题,程序奔溃。

对于浅拷贝的解决方案就是,自定义深拷贝构造函数,把指针指向的堆区的变量重新申请一块空间,进行赋值定义,拷贝出来的对象的指针变量指向这个新申请的堆区变量的地址。

析构函数

析构函数与构造函数的作用刚好相反,构造函数生成对象,而析构函数则是释放对象。析构函数在没有进行自定义的时候,编译器也会默认自定义一个析构函数,只不过是一个空函数体的函数而已。

对于析构函数的主要作用:一般就是用来处理自定义在堆区的变量,手动进行释放,减少对内存的消耗,毕竟作用域结束,对象也就没有了访问的路径,留着堆区的数据,就是一种内存泄漏。

编译器默认自动生成的三大函数(在没有进行自定义之前):无参构造函数、拷贝构造函数、析构函数

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/115101.html原文链接:https://javaforall.net

(0)
上一篇 2022年2月7日 下午7:00
下一篇 2022年2月7日 下午7:00


相关推荐

  • 80c51流水灯程序汇编语言,stc89c51单片机流水灯程序.doc

    80c51流水灯程序汇编语言,stc89c51单片机流水灯程序.doc..51单片机流水灯程序程序一(用C语言编的最基础的程序)#include#includesbitD0=P1^0;//位定义,把P1口的第一个管脚定义为D0sbitD1=P1^1;//位定义,把P1口的第二个管脚定义为D1sbitD2=P1^2;//位定义,把P1口的第3个管脚定义为D2sbitD3=P1^3;//位定义,把P1口的第4个管脚定义为D3sbitD4=P1^4;//…

    2022年5月1日
    50
  • navicat 15zuixin激活码_通用破解码

    navicat 15zuixin激活码_通用破解码,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月16日
    48
  • Python绘制折线图、散点图

    Python绘制折线图、散点图Python 绘图需要下载安装 matplotlib 模块 它是一个数学绘图库 我们将使用它来制作简单的图表 如折线图和散点图 关于 matplotlib 模块的下载安装预配置将在后面具体介绍 一 绘制折线图首先 我们先绘制一个简单的折线图 调用模块 importmatplo pyplotasplts 1 4 9 16 25 x 1

    2026年3月17日
    2
  • 大模型入门,大模型黑书《基于GPT-3、ChatGPT、GPT-4等Transformer架构的自然语言处理》(PDF版)

    大模型入门,大模型黑书《基于GPT-3、ChatGPT、GPT-4等Transformer架构的自然语言处理》(PDF版)

    2026年3月16日
    1
  • Anconda和Jupyter和Pycharm安装使用详解

    Anconda和Jupyter和Pycharm安装使用详解文章目录 1 本文概述 2 什么是 Anaconda3 为什么要使用 Anaconda3 1 使用方便 3 2 管理方便 4Anaconda 安装 4 1 到 Anaconda 官网下载安装包 4 2 开始安装 5Anaconda 使用 5 1 概述 5 2conda5 2 1 启动 conda5 2 2conda 环境管理 5 2 3conda 包管理 5 2 4Conda 使用国内源 6JupyterNote 1JupyterNote 介绍 6 2jupyternote 使用 6 2 1 打开 jupy

    2026年3月18日
    2
  • Eclipse中安装ADT插件

    Eclipse中安装ADT插件一 ADT 下载在搭建 Android 开发环境的时候 我们需要为 Eclipse 安装 ADT AndroidDevel 插件 这个插件可以为用户提供一个强大的 Android 集成开发环境 通过给 Eclipse 安装 ADT 插件 用户才能够完成快速新建 Android 项目 创建界面 调试程序 导出 apk 等一系列的开发任务 一般来说我们可以在线安装 1 nbsp nbsp 点击菜单中的 He

    2026年3月18日
    1

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号