C++中析构函数相关的知识点

简介: C++中析构函数相关的知识点

目录

析构函数和构造函数的区别

析构函数的例子

代码一:

代码二:

小结

析构函数调用的条件

析构函数和构造函数的区别

定义一个对象,c++自动调用构造函数建立该对象并进行初始化,那么当一个对象的生命周期结束时,c++会自动调用一个函数注销该对象并进行善后工作,这个特殊的成员函数叫做析构函数

析构函数和类名相同,但在前面要加~这个符号析构函数是没有函数返回类型的,与构造函数在这方面是一样的。但析构函数不带任何参数。一个类只有一个析构函数,这是和构造函数不一样的,

因为在类中构造函数时可以重载的,但时析构函数是只有一个,对象注销时,系统自动调用析构函数。若类说明中没有给出析构函数,则c++会给出一个缺省的析构函数。

析构函数的例子

观察代码一和代码二输出结果的异同:

代码一:

#include <iostream>
using namespace std; 
class Score {
  private:
    int age, score;
  public:
    Score(int a, int s);  //创建一个自定义的构造函数
    Score();  //创建构造函数的重载
    ~Score(); //首先声明一个析构函数
};
Score::Score(int a, int s) {
  cout << "我是构造函数,现在已执行……" << endl;
  age = a;
  score = s;
}
Score::Score() {
  cout << "我是构造函数的重载……" << endl;
}
Score::~Score() {
  cout << "对象注销,现在自动执行析构函数了……" << endl;
}
int main() {
  Score score1;
  //Score score2(18, 100);
}

输出结果:

代码二:

#include <iostream>
using namespace std; 
class Score {
  private:
    int age, score;
  public:
    Score(int a, int s);  //创建一个自定义的构造函数
    Score();  //创建构造函数的重载
    ~Score(); //首先声明一个析构函数
};
Score::Score(int a, int s) {
  cout << "我是构造函数,现在已执行……" << endl;
  age = a;
  score = s;
}
Score::Score() {
  cout << "我是构造函数的重载……" << endl;
}
Score::~Score() {
  cout << "对象注销,现在自动执行析构函数了……" << endl;
}
int main() {
  //Score score1;
  Score score2(18, 100);
}

输出结果:

小结

在上面我们定义了两个构造函数,所以我们定义的对象会根据对象传递的参数来自行选择构造函数,但是析构函数是总会在对象注销的时候执行,并且由于析构函数是没有参数,也没有返回值,所以构造函数是不能够重载的,因此在一个类中只能够有一个析构函数,并且如果我们不自定义析构函数的话,程序就会自动调用默认的析构函数

析构函数调用的条件

1、生命周期:对象生命周期结束,会调用析构函数。

2.delete:若一个对象是使用new运算符动态创建的,调用delete释放它时,会删除指针类对象。

3.包含关系:对象1是对象2的成员,对象2的析构函数被调用时,对象1的析构函数也被调用。

4.继承关系:当Father是Son的父类,调用Son的析构函数,会调用Father的析构函数。


相关文章
|
8月前
|
存储 人工智能 算法
【一站式备考指南】一文掌握 C++ 程序设计 课程 知识点
【一站式备考指南】一文掌握 C++ 程序设计 课程 知识点
134 0
|
2月前
|
存储 编译器 C++
【c++】类和对象(中)(构造函数、析构函数、拷贝构造、赋值重载)
本文深入探讨了C++类的默认成员函数,包括构造函数、析构函数、拷贝构造函数和赋值重载。构造函数用于对象的初始化,析构函数用于对象销毁时的资源清理,拷贝构造函数用于对象的拷贝,赋值重载用于已存在对象的赋值。文章详细介绍了每个函数的特点、使用方法及注意事项,并提供了代码示例。这些默认成员函数确保了资源的正确管理和对象状态的维护。
115 4
|
7月前
|
存储 网络协议 编译器
【干货总结】Linux C/C++面试知识点
Linux C/C++基础与进阶知识点,不仅用于面试,平时开发也用得上!
637 16
|
6月前
|
C++ 运维
开发与运维函数问题之析构函数在C++类中起什么作用如何解决
开发与运维函数问题之析构函数在C++类中起什么作用如何解决
49 11
|
7月前
|
C++ 容器
【C++】拷贝构造函数、拷贝赋值函数与析构函数
【C++】拷贝构造函数、拷贝赋值函数与析构函数
130 6
|
7月前
|
安全 编译器 C++
C++一分钟之-构造函数与析构函数
【6月更文挑战第20天】C++中的构造函数初始化对象,析构函数负责资源清理。构造函数有默认、参数化和拷贝形式,需注意异常安全和成员初始化。析构确保资源释放,避免内存泄漏,要防止重复析构。示例代码展示了不同构造函数和析构函数的调用情况。掌握构造和析构是有效管理对象生命周期和资源的关键。
57 2
|
8月前
|
C++ Linux
|
7月前
|
存储 编译器 C语言
【C++】类和对象②(类的默认成员函数:构造函数 | 析构函数)
C++类的六大默认成员函数包括构造函数、析构函数、拷贝构造、赋值运算符、取地址重载及const取址。构造函数用于对象初始化,无返回值,名称与类名相同,可重载。若未定义,编译器提供默认无参构造。析构函数负责对象销毁,名字前加`~`,无参数无返回,自动调用以释放资源。一个类只有一个析构函数。两者确保对象生命周期中正确初始化和清理。
|
7月前
|
编译器 C语言 C++
【C++】:构造函数和析构函数
【C++】:构造函数和析构函数
55 0
|
8月前
|
编译器 C++
C++程序中的派生类析构函数
C++程序中的派生类析构函数
43 2