C++:this指针和构造与析构的运用--2https://developer.aliyun.com/article/1424576
四,析构与构造的调用
构造函数的调用:
当一个程序开始定义类时,程序就自动进入了此类中的构造函数阶段,构造完了之后系统就会自动往下运行,当又遇到一个类时,又将进入此类中的构造函数,也就是说当存在多个类定义时,系统会按照从前往后的顺序调用此类的构造函数。
析构函数的调用:
析构函数是在一个函数即将结束时才会开始调用,一般情况下,调用的顺序是跟析构函数的调用顺序相反,即倒序,但是,当存在类似于static类时的情况就很不一样,因为此种情况是存储在系统的静态空间中,而静态空间不会随着函数栈帧的销毁而销毁,只有当一整个程序完毕之后才会系统才会做回收。
上图中的构造函数的调用顺序为C,A,B,D。
代码演示:
#include <iostream> using namespace std; int i = 0; class Data2 { public: Data2() { i++; cout << "2构造中的i = " << i << endl; } void Print() { i++; cout << "2类输出中的 i = " << i << endl; } ~Data2() { i++; cout << "2析构中的i = " << i << endl; } }; class Data1 { public: Data1() { i++; cout << "1构造中的i = " << i << endl; } void Print(Data2 p)//类传入,当此函数结束时,会调用Data2类中的析构,即销毁形参中的类 { i++; cout << "1类输出中的 i = " << i << endl; } ~Data1() { i++; cout << "1析构中的i = " << i << endl; } }; int main() { Data1 a;//调用Data1中的构造 Data2 b;//调用Data2中的构造 a.Print(b); cout << endl; //当系统运算到此步时就要开始调用析构函数了,在析构函数中,先析构Data2类型,再析构Data1的类型 return 0; }