C++构造函数和析构函数一点补充

C++ 构造函数与析构函数 作用:初始化对象,在对象创建时自动调用,用于分配资源、设置初始值。特性用途关键点默认构造函数无参初始化对象可自动生成,但若定义其他构造需显式声明拷贝构造函数深拷贝动态资源避免浅拷贝导致重复释放移动构造函数高效转移资源(C++11)使用std::move触发析构函数释放资源(内存、文件等)虚析构函数确保多态安全explicit禁止隐式类型转换防止意外构造初始化列表高效初始化成员必须用于const或引用成员最佳实践优先使用初始化列表。多态基类必须声明虚析构函数。 阅读详情

1. 构造函数
  在C++中,我们不可以直接通过对象调用类的构造函数进行类的实例化,如下:

class CLS{
public:
   CLS(){}
   ....
};

CLS cls, *pcls;
cls.CLS();   // ERROR!
pcls->CLS();  // ERROR!

这时编译器会直接报错,这是因为直接调用构造函数是编译器才能做得事。
CLS *cls = new CLS;
new(p) CLS(); 

上面cls只是构建了内存,尚未初始化,可以使用new定位符进行初始化。

分配内存加初始化:

CLS *cls = new CLS(); 


2. 析构函数
我们可以直接调用析构函数:
p->~dector().
析构函数在任何情况下都会被自动调用,比如出现异常时,由于出现异常,=程序执行会跳出当前块,此时,析构函数就会默默执行。析构函数只负责销毁对象,即此后该对象不再存在(相当于未定义),但析构函数不负责释放内存。

由于析构函数在任何情况下,都会被执行,因此适合将资源用类来管理,这样,出现异常时,资源就能得到释放(只要把释放资源的相关操作写到析构函数中即可),保证内存等不会被泄露。

说明: 类分为两种,一种是带指针的,一种是不带指针。后者多数不用析构函数

 

Cplusplus编程思想,作者网站www.BruceEckel.com

 

  
科研绘图避坑指南:用PyMol制作期刊级蛋白-配体相互作用图(含氢键显示技巧) 本文是一份专业的科研绘图避坑指南,详细讲解如何利用PyMol软件制作符合期刊发表标准的蛋白-配体相互作用图。文章重点分享了从构图逻辑、精准选择到氢键等相互作用的艺术化表达技巧,并提供了视觉优化与期刊适配的终极参数设置,帮助科研人员产出兼具科学严谨性与视觉美感的专业图表。 阅读详情

相关推荐

别再为模糊的3D重建头疼了!手把手教你用3DSlicer处理DICOM数据,搞定医学影像三维可视化

本文详细解析了医学影像三维重建中常见的模糊问题,并手把手教你使用3DSlicer处理DICOM数据,实现精准的三维可视化。从层厚设置到数据格式转换,再到重建算法选择和渲染参数微调,提供了一套完整的优化方案,特别适合临床医生和医学影像处理人员提升工作效率。

weixin_28693447的博客 251

C++析构函数防止内存泄漏的注意事项

C++中如果程序员没有自己定义析构函数,那么系统会提供一个默认的析构函数,但是在释放对象时,默认的析构函数只能释放该对象本身所占用的内存空间,而对象内部所指向的内存空间没有被释放,久而久之容易造成程序的卡顿甚至崩溃。 因此如果对象内部的指针指向了其他空间,我们想要在释放对象的同时释放其内部指向的空间,就需要自己定义析构函数。 代码如下: #include <iostream>// 预处理命令 using namespace std; // 使用标准命名空间std class A { p

m0_62688447的博客 1472

嵌入式状态机编程-QP状态机框架与常见状态机方法

状态机基本术语 现态:是指当前所处的状态。 条件:又称为“事件”,当一个条件被满足,将会触发一个动作,或者执行一次状态的迁移。 动作:条件满足后执行的动作。动作执行完毕后,可以迁移到新的状态,也可以仍旧保持原状态。动作不是必需的,当条件满足后,也可以不执行任何动作,直接迁移到新状态。 次态:条件满足后要迁往的新状态。“次态”是相对于“现态”而言的,“次态”一旦被激活,就转变成新的“现态”了。 传统有限状态机Fsm实现方法 如图,是一个定时计数器,计数器存在两种状态,一种为设置状态,一种为计时状态 设

qq_36969440的博客 9666

C++类析构函数

析构函数是C++释放类对象的函数,如果在类中不写析构函数,C++编译器会自动补上析构函数。 如果人为定义了析构函数,那么会调用人为定义的。默认析构函数不会释放成员指针变量所指向的内存空间,如果要释放的话,还需要人为定义释放。 析构函数在对象释放的时候自动调用,在delete 删除对象的时候,也会调用析构函数。 class Demo { public: Demo() { //无参数构造...

但行好事,莫问前程 2298

你的App合规吗?手把手教你用Camille生成隐私调用报告给老板看

本文详细介绍了如何使用开源工具Camille进行Android App隐私合规检测,并生成高管易懂的隐私调用报告。通过动态插桩技术和多维度分析,Camille能有效识别高风险API调用,并将其映射到具体法律条款,帮助技术团队与法务、产品等非技术部门高效沟通,确保App符合《个保法》等法规要求。

weixin_33726318的博客 425

YOLOv13-SWC (ShiftWise Convolution) 完整移植与原理深度解析教程

YOLOv13-SWC模型移植与原理解析 本文详细介绍了YOLOv13-SWC模型的完整移植过程与核心技术原理。YOLOv13-SWC在YOLOv8架构基础上引入ShiftWise Convolution(SWC)模块,通过创新性的位移操作、重参数化大核卷积和LoRA分解技术,显著提升了模型性能。文章包含三个核心部分: 模型移植实现:包括配置文件创建、任务模块修改和核心代码实现,重点介绍了SWC模块的掩码机制和LoRA卷积分解策略。 ShiftWise操作原理:深入解析了将大核卷积分解为小核卷积位移组合的数

FJN110的博客 506

C++基础(十)C++的析构函数:对象消亡时动态释放内存

一、析构函数举例1 参考:http://c.biancheng.net/view/152.html          一个类有且仅有一个析构函数。如果定义类时没写析构函数,则编译器生成默认析构函数。如果定义了析构函数,则编译器不生成默认析构函数。         析构函数在对象消亡时即自动被调用。可以定义析构函数在对象消亡前做善后工作。例如,对象如果在生存期间用 new 运算符动态分配了内存,...

xpj8888的博客 7416

《唤醒你的AI同事:WorkBuddy从零上手》004:与其他 AI 工具的对比

把 WorkBuddy 与聊天机器人、办公套件内置 AI、自动化工具逐维对比,并按当前版本补充四项新差距:结果交付、连接器广度、资料库与多模态产出。

LuckyHanMo的博客 683

MFC C++ 中的内存释放问题

       使用MFC编程的朋友们都知道,当我们如下调用了: CDC *pDC=GetDC();//获得窗口的设备描述表        接下来我们做完绘图功能后要调用: ReleaseDC(pDC);//释放设备描述表        这样做的目的,可以避免内存泄露。如果您不小心在视频...

qq_38883139的博客 1737

【AI Agent教程】各种Agent开发框架都是如何实现ReAct思想的?深入源码学习一下

驱动大模型有很多种方式,例如纯Prompt方式、思维链方式、ReAct方式等。ReAct 方式是 AI Agent 最常用的实现思路之一,它强调在执行任务时结合推理(Reasoning)和行动(Acting)两个方面,使得Agent能够在复杂和动态的环境中更有效地工作。

同学小张的博客 6397

图像拼接(Image Stitching)

图像拼接(Image Stitching):是一项计算机视觉技术,它将多张重叠的图像合并为一张更大、无缝的全景图或广角视图。该技术广泛应用于全景摄影、地图制作、医学影像处理、计算机视觉及增强现实(AR)等领域。

📷 图像处理践行者 | 传统算法 · 深度学习 · 多模态 | 分享实战经验与技术洞见,探索从像素到智能的无限可能。 2506

问题:为什么本例中c++析构函数不能正确释放内存及析构

下面一道C++习题的疑问,希望大家能帮我解决习题:    编写一个类Sequence,在自由存储区中按照升序存储整数值的递增序列,序列的长度和起始值在构造函数中提供.确保该序列至少有两个值,默认10个值,从0开始(0,1,2,3,4,5,6,7,8,9).需要有足够的内存空间来存储该序列,再用要求的内容来填充.    提供show()函数列出该序列,以确保正确创建Sequence对象.   

doing820000的专栏 1320

扩展卡尔曼滤波 (EKF, Extended Kalman Filter) 算法详解及案例分析

扩展卡尔曼滤波是一种用于估计非线性动态系统状态的递归算法。其目标是通过结合非线性系统模型和观测数据,估计系统的最优状态。

闲人编程的博客 2388

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

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

a只如初见的博客 3万+

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

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

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

小白的博客 5万+

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

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

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

2301_77900444的博客 4566

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

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

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

cilmy23的note 7844

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

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

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

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

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

Magnum的博客 1万+

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

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

ladybai的博客 1万+

什么是构造函数和析构函数?

1.构造函数 1.1概念 构造函数 ,是一种特殊的方法。主要用来在创建对象时初始化对象, 即为对象成员变量赋初始值,总与new运算符一起使用在创建对象的语句中。特别的一个类可以有多个构造函数 ,可根据其参数个数的不同或参数类型的不同来区分它们 即构造函数的重载。 1.2 C++构造函数 C++语言为类提供的构造函数可自动完成对象的初始化任务,全局对象和静态对象的构造函数在main()函数执行之前就被调用,局部静态对象的构造函数是当程序第一次执行到相应语句时才被调用。然而...

weixin_40787463的博客 1万+

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

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

weixin_39270987的博客 1万+

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

C++:类的构造函数和析构函数标签(空格分隔): c++ 作者:陈小默C类的构造函数和析构函数 构造函数 声明和定义 引用参数与构造函数 使用构造函数定义对象 默认构造函数 析构函数 声明和定义 析构函数的执行时机 const成员函数 实例演示 开发环境:Visual Studio 2010 构造函数当我们需要在对象创建时初始化一些数据的时候,我们不可能提供一个普通的成员方法供程序猿在对象创建后调

陈小默的博客 2万+

【c++】类的构造函数和析构函数

【c++】类的构造函数和析构函数            一.构造函数            二.构造函数的重载            三.析构函数参考:《c++从入门到精通》 人民邮电出版社 一.构造函数    构造函数是和类名相同的一个函数,它的作用是实现对象的初始化。当对象被创建时,构造函数自动被调用。     特点:            1.没有类型            2.没有返回值(...

gogo小Sa的专栏 5679

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

构造函数是一种特殊的成员函数,在创建类对象时自动调用,用于初始化对象的数据成员。析构函数是一种特殊的成员函数,在对象销毁时自动调用,用于清理资源。构造函数:对象创建时调用,用于初始化析构函数:对象销毁时调用,用于清理资源重要规则使用初始化列表初始化成员管理资源的类需要遵循 Rule of Five基类应该使用虚析构函数优先使用 Rule of Zero构造函数和析构函数是C++中实现RAII(资源获取即初始化)模式的基础,对于资源管理和异常安全至关重要。

FantasticOrange的博客 1839

C++——构造函数、析构函数以及复制构造函数

文章目录一、构造函数1.1 构造函数是什么?1.2 为什么要有构造函数?1.3 如何使用构造函数?1.4 构造函数的实现二、使用步骤 一、构造函数 在程序执行的过程中,当遇到与对声明语句时,程序会向操作系统申请一定的内存空间用于存放新建的对象。但是与普通变量相比,类的对象特别复杂,编译器不知如何产生代码去初始化对象,这便引出了构造函数。 1.1 构造函数是什么? C++中,构造函数是一种特殊的成员函数,在每次创建一个类的时候编译器都会默认调用构造函数进行初始化。 1.2 为什么要有构造函数? 构造函数的作用

xhuyang111的博客 3893
上一篇: C++里面的四个智能指针
下一篇: C++链式编程初体验
Poo_Chai
博客等级 码龄9年 178粉丝 117原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Poo_Chai

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值