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的析构函数。


相关文章
|
3月前
|
C++
C++析构函数定义为virtual虚函数,有什么作用?
C++析构函数定义为virtual虚函数,有什么作用?
28 0
|
26天前
|
编译器 C语言 C++
【c++】类和对象(三)构造函数和析构函数
朋友们大家好,本篇文章我们带来类和对象重要的部分,构造函数和析构函数
|
29天前
|
存储 算法 搜索推荐
【C++ 数据结构与算法 一站式备考指南】一文掌握 数据结构与算法课程 知识点(二)
【C++ 数据结构与算法 一站式备考指南】一文掌握 数据结构与算法课程 知识点
94 2
|
29天前
|
存储 算法 C++
【C++ 数据结构与算法 一站式备考指南】一文掌握 数据结构与算法课程 知识点(一)
【C++ 数据结构与算法 一站式备考指南】一文掌握 数据结构与算法课程 知识点
51 2
|
1月前
|
开发框架 安全 编译器
【C/C++ 深入探讨构函数】C++ 编译器在什么情况下无法生成默认的析构函数?
【C/C++ 深入探讨构函数】C++ 编译器在什么情况下无法生成默认的析构函数?
50 1
|
1月前
|
设计模式 算法 编译器
【C++ 析构函数】C++ 私有析构函数的作用
【C++ 析构函数】C++ 私有析构函数的作用
23 1
|
1月前
|
Java 程序员 编译器
【C/C++析构函数 】C++中的“垃圾回收”机制_析构
【C/C++析构函数 】C++中的“垃圾回收”机制_析构
31 0
|
1月前
|
编译器 C++
『C++成长记』构造函数和析构函数
『C++成长记』构造函数和析构函数
|
1月前
|
存储 编译器 C语言
【C++】类和对象之构造函数、析构函数、拷贝构造函数(二)
【C++】类和对象之构造函数、析构函数、拷贝构造函数(二)
|
1月前
|
安全 C++
c++类和对象一对象特性一构造函数和析构函数
c++类和对象一对象特性一构造函数和析构函数
8 0

热门文章

最新文章