【带头学C++】----- 九、类和对象 ---- 9.3 析构函数

news2024/11/17 7:26:11

目录

9.3 析构函数

9.3.1 如何定义析构函数

看下面这个顺序进行释放,{} 代表一个生命周期,或者说作用域。

对象在生命周期结束就会消亡。


9.3 析构函数

9.3.1 如何定义析构函数

       函数名和类名称相同,在函数名前加  ~ ,没有返回值类型,没有函数形参。 (不能被重载)

当对象生命周期结束的时候,系统自动调用析构函数(析构函数会先清理对象占用内存空间存放的内容,最后释放该对象的空间)

先调用析构函数,再释放对象的空间。

看下面这个顺序进行释放,{} 代表一个生命周期,或者说作用域。

对象在生命周期结束就会消亡。

消亡顺序:整体从上往下逐个构造,释放的时候出作用域最先消亡,从下往上开始释放。同级的同作用域的按照栈的顺序从下往上释放。

栈:先进后出,最早出现的进入栈底下,最后出现的进入到栈顶部,想象成井水。栈是一种存储的数结构,存储在里面的数据,按照这个顺序进行压栈弹栈。(后面会专门更一下常见数据结构,感兴趣的小伙伴,也可以去找一些视频观看。)

一般情况下,空的析构函数就足够。但是如果一个类有指针成员,这个类必须写析构函数,释放指针成员所指向空间。 

 内存泄漏问题是比较常见的问题,并且也是很严重的污染内存空间的行为,所以,使用指针,要记得释放,申请堆区空间要记得释放。

 

 代码:


#include <string.h>
#include <iostream>

using namespace std;

class Data2{
public:
     char * name;
public:
    //无参构造函数
    Data2(){
        name = nullptr;
        cout << "无参构造函数" << endl;
    }

    //有参构造函数
    Data2(const char * str){
        name  = new char[strlen(str) + 1];
        strcpy_s(name, strlen(str) + 1, str);
        cout << "有参构造函数" << endl;
    }

    ~Data2(){
        //析构函数
        if(name != nullptr){
            delete [] name;
        }
         cout << "析构函数"<< endl;
    };
};
void test02(){
    Data2 da1("Hellow");
    cout<<da1.name<<endl;
}
int main()
{
    test02();
    return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1284334.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

uniapp开发小程序经验记录

uniapp开发小程序的过程中会遇到很多问题&#xff0c;这里记录一下相关工具优化&#xff0c;便于后来者参考。 每次保存代码后&#xff0c;小程序都跳回首页 针对这个问题&#xff0c;常规的做法就是修改pages配置文件&#xff0c;但是这种方式不便于路由参数的设置&#xff…

vue3 中使用 sse 最佳实践,封装工具

工具 // 接受参数 export interface SSEChatParams {url: string,// sse 连接onmessage: (event: MessageEvent) > void,// 处理消息的函数onopen: () > void,// 建立连接触发的事件finallyHandler: () > void,// 相当于 try_finally 中的 finally 部分&#xff0c;不…

用户态和内核态

实际上任何Linux发行版(Centos/RedHat....)&#xff0c;其系统内核都是Linux。我们的应用都需要通过Linux内核与硬件交互。为了避免用户应用导致冲突甚至内核崩溃&#xff0c;用户应用与内核是分离的&#xff1a; 进程的寻址空间会划分为两部分&#xff1a;内核空间、用户空间。…

虾皮数据分析网站:了解Shopee市场趋势与优化运营的利器

在如今的电商时代&#xff0c;越来越多的人选择在虾皮购物&#xff08;Shopee&#xff09;平台上开设自己的店铺。然而&#xff0c;要在这个竞争激烈的市场中脱颖而出并取得成功&#xff0c;并不是一件容易的事情。为了更好地了解市场趋势、优化产品和店铺运营&#xff0c;了解…

百度地图取点 范围绘制 画范围 手工绘制范围

<template><div class"app-container"><div style"margin-bottom:30px"><el-input type"textarea" :rows"2" placeholder"请输入内容" v-model"str"></el-input></div><d…

基于SSM框架的网上书店系统

基于SSM框架的网上书店系统 文章目录 基于SSM框架的网上书店系统 一.引言二.系统设计三.技术架构四.功能实现五.界面展示六.源码获取 一.引言 随着互联网的普及和电子商务的快速发展&#xff0c;网上书店系统成为了现代人购买图书的主要方式之一。网上书店系统不仅提供了便捷的…

MFC发送ZPL指令控制斑马打印机

1、参考1&#xff1a;用Python操控斑马打印机的技术总结 - 重拾初心的青年人 - 博客园 (cnblogs.com) 参考2&#xff1a;VC斑马打印机_vc zpl-CSDN博客 参考3&#xff1a;斑马打印机ZPL语言编程实战_梅长酥的博客-CSDN博客 参考4&#xff1a;关于斑马打印机开发的几种方式_斑马…

AGI智能新时代,大模型为软件开发带来范式变革

导语 | 人工智能作为新一轮科技革命和产业变革的重要驱动力量&#xff0c;尤其是在当下新一轮 AI 大模型、生成式 AI 浪潮背景下&#xff0c;重视通用人工智能&#xff08;AGI&#xff09;成为行业的共识。在当前&#xff0c; AGI 技术背后的逻辑究竟是怎样的&#xff1f;技术创…

【shell】

shell 一、shell简介二、shell脚本的执行方式三、shell变量3.1 shell变量介绍3.2 shell变量的定义3.1.1 基本语法3.2.2 定义变量的规则3.2.3 将命令的返回值赋予变量 四、环境变量的设置4.1 基本语法&#xff1a; 五、位置参数变量5.1 基本介绍5.2 基本语法 六、预定义变量6.1 …

人工智能_机器学习059_非线性核函数_poly核函数_rbf核函数_以及linear核函数效果对比---人工智能工作笔记0099

人工智能_机器学习059_非线性核函数介绍---人工智能工作笔记0099 那么我们应该如何调整这个SVC的参数,也就是我们应该使用哪种核函数,比较合适呢?这取决于我们的数据,适合使用哪个核函数,正好我们有 提供的score = accuracy_score(y_test,y_pred) 这样的评分函数,我们可以根据…

安装Python以及pycharm

Pycharm是编辑器。相当于Word对文字进行编辑。 Python是解释器。讲代码翻译为计算机可以理解的指令。 1、安装Python 官网&#xff1a;Welcome to Python.org 打开的时候有点慢等待一会就好&#xff0c;点击下载&#xff0c;选择Windows版本 等待一会&#xff0c;可以看到如…

全志T527设置gpio口输出高电平实际输出低电平

前言 在调试T527的时候&#xff0c;主板另外添加了gpio口去控制usb口的电源开关&#xff0c;软件上面需要在内核运行的时候将gpio口设置输出高电平&#xff0c;usb口才可以正常使用。改好系统固件后&#xff0c;升级发现&#xff0c;机器开机动画过程中可以控制gpio口去打开us…

怎么翻译英文医学文献资料

文献翻译是一项要求严谨、精确且地道的工作&#xff0c;对于医学文献翻译更是如此。那么&#xff0c;怎么翻译英文医学文献资料&#xff0c;医学英文文献翻译公司哪个好&#xff1f; 专业人士指出&#xff0c;在翻译医学文献时&#xff0c;理解原文的语境是至关重要的。这不仅需…

沐风老师3DMAX随机变换工具RandomTransform插件使用方法详解

3DMAX随机变换工具RandomTransform插件使用方法 3dMax随机变换工具RandomTransform&#xff0c;是一款用MAXScript脚本语言开发的3dsMax小工具&#xff0c;可以随机变换选中的单个或多个对象的位置、角度及大小。 在3dMax中“变换”工具是最常用的工具&#xff08;移动、旋转和…

配置multipath.conf后linux主机重启异常处理

有个db备库主机&#xff0c;操作系统是Oracle Linux Server release 8.8&#xff0c;因本地空间不足&#xff0c;通过fc挂接存储磁盘&#xff0c;配置/etc/multipath.conf后&#xff0c;重启主机验证&#xff0c;发现启动异常&#xff0c;入下图 # lsb_release -a LSB Version…

Python入门07循环及常见的数据结构

目录 1 循环的语法结构2 break和continue的示例3 可迭代对象4 列表5 元组6 列表和元组的应用场景7 集合8 字典9 生成器 1 循环的语法结构 在Python中&#xff0c;循环是一种控制结构&#xff0c;用于重复执行一段代码&#xff0c;直到满足特定条件。Python中有两种循环结构&am…

Ribbon-IRule 修改负载均衡的规则

1、负载均衡规则描述 &#xff08;1&#xff09;整体关系 &#xff08;2&#xff09;规则描述 内置负载均衡规则类规则描述RoundRobinRule简单轮询服务列表来选择服务器。它是Ribbon默认的负载均衡规则。AvailabilityFilteringRule对以下两种服务器进行忽略: (1)在默认情况下&…

阿里蹲完滴滴蹲,滴滴蹲完腾讯蹲,昨晚腾讯视频出现短暂技术故障

01 腾讯视频出现短暂技术问题。昨晚&#xff08;12月3日&#xff0c;周日&#xff09;&#xff0c;不少网友休息天都在观看影视节目&#xff0c;然而有网友突然发现腾讯视频出现网络故障。据网友反馈&#xff0c;具体问题&#xff1a;如首页无法加载内容、VIP用户看不了会员视频…

电力系统中的直流负载,你了解多少?

直流负载在电力系统中扮演着重要的角色&#xff0c;它是电力系统的重要组成部分&#xff0c;对于电力系统的稳定运行起着至关重要的作用。直流负载主要包括直流电动机、蓄电池、电解设备等。 首先&#xff0c;我们来了解一下直流负载的基本原理。直流负载是指能够将电能转化为其…

【STM32】TIM定时器输出比较

1 输出比较 1.1 输出比较简介 OC&#xff08;Output Compare&#xff09;输出比较&#xff1b;IC&#xff08;Input Capture&#xff09;输入捕获&#xff1b;CC&#xff08;Capture/Compare&#xff09;输入捕获和输出比较的单元输出比较可以通过比较CNT与CCR寄存器值&#…