1、构造函数的调用顺序
基类构造函数、对象成员构造函数、派生类本身的构造函数
2、析构函数的调用顺序
派生类本身的析构函数、对象成员析构函数、基类析构函数(与构造顺序正好相反)
3、特例
局部对象,在退出程序块时析构
静态对象,在定义所在文件结束时析构
全局对象,在程序结束时析构
继承对象,先析构派生类,再析构父类
对象成员,先析构类对象,再析构对象成员
#include "stdafx.h"
#include <iostream>
using namespace std;
class Clock
{
public:
Clock()
{
cout << "clock的构造函数" << ",";
}
~Clock()
{
cout << "clock的析构函数" << ",";
}
};
class Date
{
public:
Date()
{
cout << "date的构造函数" << ",";
}
~Date()
{
cout << "date的析构函数" << ",";
}
};
void main()
{
Clock c;
Date d;
system("pause");
}
在使用构造函数和析构函数时,需要特别注意对它们的调用时间和调用顺序。在一般情况下,调用析构函数的次序正好与调用构造函数的次序相反:最先被调用的构造函数,其对应的(同一对象中的)析构函数最后被调用,而最后被调用的构造函数,其对应的析构函数最先被调用。
可以简记为:先构造的后析构,后构造的先析构,它相当于一个栈,先进后出