C++构造函数和析构函数

析构函数的初学 一.什么是析构函数 1.名字和类名相同,在前面加‘~’,没有参数和返回值,一个类最多只能有一个析构函数 2.析构函数对象消亡时即自动被调用。可以定义析构函数来在对象消亡前做善后工作,比 如释放分配的空间等 3.如果定义类时没写析构函数,则编译器自动生成缺省析构函数。缺省析构函数什么也不做 #include<iostream> using namespace std; class A { public: A() { cout&lt... 阅读详情

构造函数

构造函数的用处是初始化对象的成员变量,它需要在类中定义。比如举个构造函数的例子

看到了吗,上面的类Myclass里面还有一个Myclass的函数,而那个函数就是构造函数,负责在对象生成时对成员变量进行初始化。 

构造函数有以下几个特点

1.函数名与类名是一样的

2.构造函数时绝对没有返回值的,C++规定如此。

加返回值会编译报错 

3.在生成一个实例化对象时,会自动调用类的构造函数将对象初始化。

4.构造函数是可以重载的

从这两对截图看出构造函数是可以重载的,由于初始化调用的实参不同导致调用的构造函数不同 

 5.默认生成的构造函数

如果我们没有定义构造函数那么编译器就会自动生成一个无参的默认构造函数,一旦我们定义了一个构造函数,那么就不会生成编译器就不会自动生成构造函数.

6.默认构造函数

全缺省构造函数和无参构造函数和编译器自动生成的构造函数都为默认构造函数,但是无参构造函数不能和全缺省构造函数同时存在否则编译器会报错

 

 

像这种同时存在无参和全缺省的构造函数就会发生编译错误。

因为如果你让MyClass MD;那么编译器就不知道要调用那个构造函数,存在歧义。

意思就是说不传实参也能调用的构造函数都为默认构造函数,且不能同时存在。

7.设置自定义类型默认调用它的初始化

C++把类型分为内置类型和自定义类型,内置类型就是语言提供的原生数据类型,如int/char/double/指针等,自定义类型就是我们自己定义的类型比如用class和struct定义的类型。

对于内置类型类中的默认构造函数可以将它初始化,但是对于自定义类型,类中的默认函数无法将它初始化,但在这个类中生成对象时,会自动调用自定义类型的类中的默认构造函数,但是如果这个自定义类型中的类没有默认构造函数那么编译器就会报错,默认构造函数又分为,无参构造函数,全缺省构造函数,我们不写编译器自动生成的构造函数,

假如我们写一个半缺省的构造函数

那么这时编译器运行就会报错

自定义类型没有调用默认函数初始化就会报错

那么内置类型被初始化后的值是什么呢??

让我们看代码

 

你们看这个代码,调用了默认的构造函数,但是对内置类型初始化是一个随机值。 

析构函数

1.析构函数的定义

1.析构函数名和类名差不多,就是在类名前加一个~符号比如

2.无参数也无返回值(和构造函数差不多,不需要加了类型什么void的之类的)

3.一个类只能有一个析构函数,若未显示定义,系统会自动生成默认的析构函数。

4.对象生命周期结束时,系统会自动调用析构函数 

5.和构造函数类似,我们不写编译器会自动生成一个析构函数,但这个析构函数对内置类型不做处理,自定义类型会调用它的类的析构函数,自定义类型无论什么时候都会调用它的析构函数,但是和类不同的时自定义类型的析构函数不会因为定义的问题而发生报错

6.对于类如果它的类型全是内置类型数据,那么我们可以不写析构函数,但是如果它有对内存空间的申请,那么我们就需要写析构函数,否则会发生内存泄漏问题

7.一个局部域的对各对象,C++规定后定义的先析构

2.析构类型的用法

当类创建对象时可能会向系统申请空间比如:

像这种在建立对象时有对系统申请空间,那我们要怎么访问这个arr然后去向系统还掉这份空间呢

难道是在类的内部建立一个释放空间的函数吗比如: 

难道我们要这样去写吗,每次建立一个对象都要再调用它的销毁函数???

C++为我们提供了更加简单的方案,

当对象中没有对系统申请空间的程序时,编译器会生成默认的析构函数,这时我们也就不需要写析构函数,但当我们有对系统申请空间时,我们需要自己写析构函数,如下图

当对象的生命周期结束时,就会自动调用它的析构函数,这样之后写代码就不需要我们挨个去销毁了。 

C++——构造函数和析构函数、new对象 简单来说,有对象生成必然会调用构造函数,有对象销毁必然会调用析构函数。构造函数的作用是成员变量,是由编译器去调用的,而析构函数同理也是由编译器调用,不过他的作用则是。可以由下面的代码体验两个函数的使用。注意:相同点:两个函数都没有返回值,不能用void不同点:构造函数可以有参数,析构函数没有参数运行结果:1. 构造函数可以重载2.当构造函数私有时,无法实例化对象,所以构造函数和析构函数都是公有的补充:实例化对象的时候内部操作:1.分配空间(将对象m分配到栈区)2.调用构造函数进行初始化。 阅读详情

相关推荐

TSmaster CANFD配置避坑指南:为什么你的PCAN盒不支持最新版本?

本文针对TSmaster配置PCAN硬件进行CANFD通信时的常见问题,提供了详细的避坑指南。重点解析了CANFD配置中TSEG1等关键参数的理解误区,并深入探讨了TSmaster新版本与PCAN硬件驱动之间的兼容性变化,帮助工程师快速定位并解决连接失败或无法发送CANFD报文等问题。

alpha的博客 541

c++ 构造函数与析构函数(详解)

超详解c++构造函数与析构函数(含图片与代码)

2201_75964502的博客 1233

基因家族扩张收缩分析可视化(CAFE5)

CafePlotter 是一个用于可视化 CAFE5 基因家族扩张收缩分析结果的 Python 工具

xuzhougeng blog 3632

c++构造函数和析构函数

一、构造函数和析构函数的特点 构造函数和析构函数是一种特殊的公有成员函数,每一个类都有一个默认的构造函数和析构函数; 构造函数在类定义时由系统自动调用,析构函数在类被销毁时由系统自动调用; 构造函数的名称和类名相同,一个类可以有多个构造函数,只能有一个析构函数。不同的构造函数之间通过参数个数和参数类型来区分; 我们可以在构造函数中给类分配资源,在类的析构函数中释放对应的资源。 二、不带参数的构造函数 C++类在创建时,系统会默认创建一个不带参数的构造函数,我们可以重新定义这个构造函数。默认构造函数在类被

weixin_39270987的博客 1万+

向量乘法器设计

同样基于Wallace树乘法器,我们来构造向量乘法器。 在一些矩阵运算中经常用到向量的相乘运算,本例以4维向量为例子介绍向量乘法器的verilog HDL设计。 设向量a = (a1, a2, a3, a4), b = (b1, b2, b3, b4)。 则a 与 b的点乘为:a * b = a1 b1 + a2 b2 + a3 b3 + a4 b4, 即向量对应位置的值相乘,再相加...

Reborn Lee 2967

实战分享:如何用YOLOv5s+BIFPN高效检测隧道裂缝(附数据集获取)

本文详细介绍了如何利用YOLOv5s结合BIFPN(双向特征金字塔网络)构建高效的隧道裂缝智能检测系统。文章从高质量数据集构建、针对性数据增强、模型架构选型与调优,到工程化部署全链路进行了实战分享,旨在为基础设施自动化巡检提供兼顾精度与速度的解决方案。

weixin_29062823的博客 380

C++ 构造函数与析构函数

这可能会导致问题,例如,当一个对象被删除时,其析构函数可能会删除共享的内存,从而使另一个对象的指针变为悬挂指针。但是,如果类有指向动态分配内存的指针成员,或者包含需要特殊处理的资源(如文件句柄,网络连接等),那么通常需要提供自定义的拷贝构造函数以执行深拷贝。:当我们执行深拷贝时,不仅复制对象的所有非静态成员变量,还会为每个动态内存分配的指针成员创建新的内存复制,确保新对象获得的是原始对象数据的全新副本,而不是引用同一内存。在 C++ 中,构造函数是一种特殊的成员函数,它会在创建类的新对象时自动被调用。

2201_75772333的博客 1745

基于树莓派5的AR头显开发:从硬件选型到Unity整合全解析

增强现实(AR)技术通过将虚拟信息叠加到真实世界,为用户提供沉浸式交互体验。其核心原理依赖于计算机视觉进行环境感知与空间定位,并结合实时3D渲染实现虚实融合。在工程实践中,嵌入式平台因其低成本、低功耗特性,成为探索AR应用边界的重要载体。本项目以树莓派5为核心,通过集成OpenCV进行ArUco标记识别实现精准空间定位,并利用MediaPipe完成手势交互,最终在Unity引擎中完成虚实场景的实时渲染与融合,为开发者提供了一个完整的、可亲手实践的AR系统开发方案。

weixin_32430941的博客 254

C++ 构造函数和析构函数 详解

C++中用构造函数和析构函数来初始化和清理对象,这两个函数将会被编译器自动调用。对象的初始化和清理是非常重要的,如果我们不提供构造函数与析构函数,编译器会自动提供两个函数的空实现。............

a只如初见的博客 3万+

全局–局部傅里叶神经算子(GL-FNO):原理、严格推导与 PINN 混合策略

本文提出了一种全局-局部傅里叶神经算子(GL-FNO)及其与物理信息神经网络(PINN)的结合方法。主要内容包括: 架构设计:GL-FNO包含两个分支 - 全局分支处理低频结构,使用下采样输入;局部分支处理高频细节,使用全分辨率输入。两分支通过自适应门控机制融合。 理论分析:证明了GL-FNO在"低频全局+高频局部"任务上的优势,给出了误差分解和复杂度分析,并推导了与PINN结合时的渐进一致性条件。 实现方法:采用频谱微分计算物理残差,推导了完整的训练流程,包括数据损失与物理损失的联合优

VectorShift的博客 1330

Unreal5从入门到精通之Landscape地形系统

虚幻引擎 5 (UE5) 能够利用其强大的地形编辑工具套件创建大规模的地形世界。使用地形工具可以创建身临其境的户外地形,这些地形经过优化,可在多种不同设备上保持可播放的帧速率。

TxNet 4142

【C++】:构造函数和析构函数

如果一个类中什么成员都没有,简称为空类。空类中真的什么都没有吗?并不是,任何类在什么都不写时,编译器会自动生成以下6个默认成员函数。默认成员函数用户没有显式实现,编译器会生成的成员函数称为默认成员函数。这篇文章介绍的是构造函数和析构函数。1.一般情况下构造函数都需要我们自己显式的去实现。2.只有少数情况下可以让编译器自动生成构造函数。(类似用两个栈实现队列的MyQueue,它的成员都是自定义类型)

2301_77900444的博客 4563

【电源专题】Type-C母座外壳直接接主板GND还是接RC呢?别再纠结了!

Type-C屏蔽壳接地这件事,没有唯一标准答案。符合规范、贴合产品、能过认证,就是最优解。希望这篇文章能帮你理清思路。

一点硬件 595

C/Cpp / C++ 构造函数和析构函数可以是虚函数吗

答案 构造函数不可以是虚函数,而析构函数可以且常常是虚函数。 原因 1、构造函数不可以是虚函数 当类中声明虚函数时,编译器会在类中生成一个虚函数表,虚函数表是一个存储成员函数指针的数据结构。 虚函数表是由编译器自动生成与维护的,virtual成员函数会被编译器放入虚函数表中,当存在虚函数时,每个对象都有一个指向虚函数的指针(vptr指针)。在实现多态的过程中,父类和派生类都有vptr指针。 vptr的初始化:当对象在创建时,由编译器对 vptr 指针进行初始化。在定义子类对象时,vptr 先指向

布袋和尚 1260

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

【C++】C++中的构造函数和析构函数详解

本篇主题为:C++中的构造函数和析构函数详解写在前头:本篇会从类的六个默认成员函数开始,进入构造函数和析构函数的研究。

cilmy23的note 7839

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

C++构造函数和析构函数的总结

C++是面向对象的编程语言,在定义类的时候,离不开构造和析构函数。类中同类同名的成员函数称为构造函数,主函数中初始化一个对象时,如果有传入数据,其实是传入到构造函数的形参中。

ladybai的博客 1万+

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

C++的构造函数和析构函数

【代码】C++的构造函数和析构函数。

物是人非,结局始终不美 2万+

C++——构造函数和析构函数

构造函数和析构函数

2301_79310249的博客 1241

C++ 类(构造函数和析构函数)

文章概述 构造函数和析构函数的由来? 构造函数和析构函数的基本语法 C++编译器构造析构方案 PK 对象显示初始化方案 构造函数的分类以及调用 默认的构造函数 构造函数调用规则 构造函数和析构函数的总结 构造函数和析构函数的由来 类的数据成员不能在类的声明时候初始化,为了解决这个问题? 使用构造函数处理对对象的初始化。构造函数是一种特殊的成员函数,与其他函数不同,不需要用户调用它,而...

小白的博客 5万+

【C++】构造函数和析构函数

构造函数是特殊的公有成员函数(但不是只是公有成员函数,在特殊用途中构造函数的访问限定可以定义为私有或保护)。函数名称与类同名:构造函数名称必须与类名严格一致。无返回值类型:无需声明返回类型(是没有返回类型,而不是void),实际上构造函数有返回值,返回值就是构造函数所创建的对象。在程序运行时,当新的对象被建立,该对象所属的类构造函数自动被调用,在该对象的生存周期中也只调用这一次。

2302_76793428的博客 1308

【Cpp】类和对象#构造函数 析构函数

但是st1的类没有写析构函数,也只是调用默认生成的析构,这时,st1中的动态申请的堆空间就无法释放了,造成内存泄漏)默认生成虽然好,但是如果默认生成的构造/析构函数在调用时由于只处理自定义类型,如果自定义类型的构造/析构没有写,那么即使是默认生成的函数,本质上也是没有做任何工作。构造函数是特殊的成员函数,需要注意的是,构造函数虽然名称叫构造,但是构造函数的主要任务并不是开空间创建对象,而是初始化对象。与构造函数功能相反,析构函数不是完成对对象本身的销毁,局部对象销毁工作是由编译器完成的。

石墨博客 1436

C++拷贝构造函数、构造函数和析构函数

一、拷贝构造函数 转载自:http://www.cnblogs.com/BlueTzar/articles/1223313.html 1、类对象的拷贝     对于普通类型的对象来说,它们之间的复制是很简单的,例如: int a=88; int b=a;       而类对象与普通对象不同,类对象内部结构一般较为复杂,存在各种成员变量。下面看一个类对象拷贝的简单例子。    #...

u014391177的博客 4万+

C++ 构造函数和析构函数可以是虚函数嘛?

简单总结就是:构造函数不可以是虚函数,而析构函数可以且常常是虚函数。 构造函数不能是虚函数 1. 从vptr角度解释 虚函数的调用是通过虚函数表来查找的,而虚函数表由类的实例化对象的vptr指针(vptr可以参考C++的虚函数表指针vptr)指向,该指针存放在对象的内部空间中,需要调用构造函数完成初始化。如果构造函数是虚函数,那么调用构造函数就需要去找vptr,但此时vptr还...

Magnum的博客 1万+
上一篇: C++类的定义和实例化对象和this指针
下一篇: C++拷贝构造函数
Arcane Code
博客等级 码龄3年 598粉丝 101原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值