返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >一文带你学习C++析构函数
  • 481
分享到

一文带你学习C++析构函数

C++析构函数的使用C++析构函数学习C++析构函数C++ 函数 2023-05-19 11:05:30 481人浏览 八月长安
摘要

目录c++析构函数的学习析构函数的基本使用多个析构函数的使用继承中的析构函数总结C++析构函数的学习 在C++中,析构函数是一种特殊类型的成员函数,用于在对象生命周期结束时被自动调用

C++析构函数的学习

在C++中,析构函数是一种特殊类型的成员函数,用于在对象生命周期结束时被自动调用。一个对象生命周期的终止可以发生在以下情况:

  • 函数执行完毕
  • 对象被显式删除
  • 对象超出范围

在这些情况下,析构函数都会被调用,该函数负责清除对象占用的内存空间和释放其他资源。析构函数的语法如下:

class ClassName {
public:
    ClassName(); // 构造函数
    ~ClassName(); // 析构函数
};

可以看到,在类中声明析构函数时,在函数名前加上了一个波浪线符号“~”,这用来表示这是一个析构函数。与构造函数一样,析构函数也可以被重载

接下来,我们将介绍C++析构函数的一些重要知识点,并提供相应代码示例

析构函数的基本使用

当构造函数创建一个对象时,它使用new运算符分配内存。在对象不再需要时,我们需要使用delete运算符来释放内存。在这种情况下,析构函数就可以派上用场。下面是一个简单的示例:

#include<iOStream> 
using namespace std; 

class Number {
private:
    int* ptr;
public:
    Number() {
        ptr = new int;
        *ptr = 0;
    }
  
    ~Number() {
        delete ptr;
    }
  
    int getValue() {
        return *ptr;
    }
    
    void setValue(int value) {
        *ptr = value;
    }
};

int main() {
    Number obj1;

    obj1.setValue(5);
    cout << obj1.getValue() << endl;

    return 0;
}

在这个示例中,我们使用了一个指向整数的指针,并在构造函数中为其分配内存。在析构函数中,我们使用delete运算符来释放该指针的内存空间。这个程序打印出5,表明成功对obj1中的整数值进行了修改

多个析构函数的使用

如果在类中定义了多个析构函数,无论是因为函数重载,还是出于其他原因,它们都会按照与它们的构造函数相同的顺序被自动调用 ,下面是一个示例:

#include<iostream> 
using namespace std; 

class Student {
private:
    int age;
    char* name;
public:
    Student() {
        age = 0;
        name = new char[10];
    }

    Student(int a, char* n) {
        age = a;
        name = new char[strlen(n) + 1];
        strcpy(name, n);
    }
  
    ~Student() {
        delete [] name;
    }

    void display() {
        cout<<"Name: "<<name<<" Age: "<<age<<endl;
    }
};

int main() {
    Student obj1(19, "John");
    Student obj2(21, "Peter");
    obj1.display();
    obj2.display();

    return 0;
}

在这个示例中,我们定义了两个构造函数,一个默认的和一个带参数的。当我们创建两个对象时,分别使用了这两个不同的构造函数。在析构函数中,我们释放了为name指针分配的内存空间,而不管哪个构造函数被使用,这样就避免了内存泄露

继承中的析构函数

在继承中,基类的析构函数会在派生类的析构函数之前被自动调用,因此必须在基类中定义一个虚析构函数。这允许派生类中的任何资源在析构之前被清理。下面是一个示例:

#include<iostream> 
using namespace std; 

class Shape {
public:
    Shape() {
        cout<<"Shape constructor\n";
    }
  
    virtual ~Shape() {
        cout<<"Shape destructor\n";
    }
};

class Square: public Shape {
public:
    Square() {
        cout<<"Square constructor\n";
    }
  
    ~Square() {
        cout<<"Square destructor\n";
    }
};

int main() {
    Shape* shape = new Square();
    delete shape;

    return 0;
}

在这个示例中,我们定义了一个Shape基类和一个Square派生类。由于Shape类定义了虚拟析构函数,当我们通过基类指针delete Square对象时,它将首先调用Shape类的析构函数,然后再调用Square类的析构函数,确保派生类中的任何资源被清理

总结

在本文中,介绍了C++析构函数的基本知识点,包括在内存分配和释放、多个析构函数的使用和继承中的析构函数。强调了析构函数负责清理对象占用的内存空间和释放其他资源,在对象的生命周期结束时被自动调用

需要注意的是,在使用析构函数时,必须确保不会在它们已被调用的对象上进行任何操作,否则可能会出现严重的编程错误。另外,在使用多个析构函数时,它们的顺序非常重要,应该按照构造函数的顺序进行调用

到此这篇关于一文带你学习C++析构函数的文章就介绍到这了,更多相关C++析构函数内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: 一文带你学习C++析构函数

本文链接: https://lsjlt.com/news/213162.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 一文带你学习C++析构函数
    目录C++析构函数的学习析构函数的基本使用多个析构函数的使用继承中的析构函数总结C++析构函数的学习 在C++中,析构函数是一种特殊类型的成员函数,用于在对象生命周期结束时被自动调用...
    99+
    2023-05-19
    C++析构函数的使用 C++析构函数学习 C++析构函数 C++ 函数
  • 一文带你学习一下C++中的构造函数
    目录C++构造函数学习1.带参数的构造函数2.多个构造函数3.拷贝构造函数C++构造函数学习 构造函数是一种特殊的函数,它用于在创建对象时初始化对象的值。所有的类都有构造函数,但如果...
    99+
    2023-05-19
    C++构造函数的使用 C++构造函数学习 C++构造函数 C++ 函数
  • 一文带你学习C++中的虚函数
    目录概念语法使用总结概念 虚函数是一种具有特殊属性的成员函数,它可以被子类重写,并在运行时确定调用哪个方法。为了定义一个虚函数,将在该函数的声明中使用关键字virtual。当调用一个...
    99+
    2023-05-19
    C++虚函数 C++函数
  • 一篇文章带你深入学习Python函数
    目录函数的特性:函数是对象:函数可以删除:总结函数的特性: 函数是对象函数可以删除函数名字和函数本身完全是分开的函数因为是对象,可以结合数据结构使用函数因为是对象,可以作为函数参数函...
    99+
    2024-04-02
  • 一篇文章带你学习python的函数与类
    目录函数模块类根据类创建实例继承总结现在做的一个小项目需要用到python的相关知识,但是因为太久没用一些东西都忘掉了,因此在本篇博客中记录一下python的函数和类的基础知识,下次...
    99+
    2024-04-02
  • 一篇文章带你学习Python3的高阶函数
    目录1.高阶函数2.map/reduce3.filter4.sorted总结1.高阶函数 # 1.变量指向函数 # 调用函数和函数本身 print("-10的绝对值为:",abs(-...
    99+
    2024-04-02
  • 一文带你学会C语言中的qsort函数
    目录铺垫知识使用qsort函数进行整型数组的排序使用qsort函数进行浮点型数组的排序使用qsort函数进行结构体数组的排序铺垫知识 qsort函数 参数类型  ...
    99+
    2022-12-21
    C语言 qsort函数 C语言 qsort
  • 一文带你学习C/C++中的<Windows.h>库
    目录前言(1)cls(2)pause(3)(4)关机开机不必多说。(5)color XX总结前言 众所周知,C++里有一个语句system,那么他究竟有什么用呢?我们来看一看吧。 s...
    99+
    2023-01-11
    c++ windows.h库 C++ windows.h C语言Windows.h
  • 一文带你学习C++中的派生机制
    目录一、派生的类型二、派生的语法三、多重继承四、虚继承五、派生类和基类的关系六、总结C++是一门面向对象的编程语言,其中的派生机制是其重要的面向对象特性之一。派生是建立在现有类的基础...
    99+
    2023-05-15
    C++派生机制应用 C++派生机制 C++派生
  • 一篇文章带你了解C++Primer学习日记--处理数据
    目录1.简单变量1.1变量名1.2整型short,int,long和long long1.3无符号类型1.4选择整型类型1.5char类型2.const限定符3.浮点类型4.类型转换...
    99+
    2024-04-02
  • 一文带你学习Java中的线程
    目录介绍线程通用的线程生命周期Java 的线程生命周期Java 的线程状态切换从 NEW 到 RUNNABLE 状态从 RUNNABLE 到 TERMINATED 状态1. RUNN...
    99+
    2023-05-20
    Java 线程 Java线程总结
  • 一起来学习C++的构造和析构
    目录1. 构造函数 1.1 构造函数长什么样子1.2 构造函数干嘛的1.3 思考2. 析构函数2.1 析构函数长什么样子2.2 析构函数用来干嘛(什么时候需要自己手动写析构...
    99+
    2024-04-02
  • 一步步带你学习设计MySQL索引数据结构
    目录前言索引介绍索引设计目标索引设计迭代迭代一迭代二迭代三迭代四迭代小结索引结构总结聚簇索引非聚簇索引联合索引索引优点和缺点优点缺点总结前言 mysql的索引是一个非常重要的知识点,也基本上是面试必考的一个技术点,所以非...
    99+
    2024-04-02
  • 一篇文章带你入门C语言:函数
    目录函数定义库函数定义介绍Example 1 strcpyExample 2 memset自定义函数Example 1Example 2 两数交换链式访问Example 1函数声明函...
    99+
    2024-04-02
  • 一篇文章带你了解C/C++的回调函数
    目录函数指针概念先来看一个Hello World程序然后,采用函数调用的形式来实现用函数指针的方式来实现函数指针数组回调函数概念标准Hello World程序将它修改成函数回调样式修...
    99+
    2024-04-02
  • 带你从头学习C++的封装
    目录封装属性和行为作为整体 实例—设计学生类访问权限class与struct区别成员属性私有化设计立方体类总结封装 c++认为万事万物皆为对象,对象上有其属性和...
    99+
    2024-04-02
  • 手把手带你学习C++的数据类型
    目录数据类型01 整型:02 sizeof关键字03 实型(浮点型)04 字符型05 转义字符06 字符串型07 布尔型08 数据的输入总结 数据类型 C++规定在创建一个变量或者常...
    99+
    2024-04-02
  • 一篇文章带你学习Mybatis-Plus(新手入门)
    目录Mybatis-Plus1.快速入门地址:安装 | MyBatis-Plus (baomidou.com)2.创建数据库mybatis-plus3.创建springboot项目,...
    99+
    2024-04-02
  • 一篇文章带你学习JAVA MyBatis底层原理
    目录一、传统JDBC的弊端二、mybatis介绍三、MyBatis架构图核心类解释工作流程四、自己通过加载xml配置走mybais流程实现例子总结一、传统JDBC的弊端 j...
    99+
    2024-04-02
  • 一篇文章带你了解C语言函数递归
    目录什么是递归?递归的两个必要条件递归实例实例1(按照顺序打印一个数的整形值)画图讲解 完整代码 实例2 (使用函数在不创建变量的情况下求字符串长度)画图讲解程序...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作