第九章、类和对象(高级)
1. 全局变量(对象)的构造和析构函数调用规则
全局变量(对象)存在于数据段,而数据段是在 main 函数调用之前创建,因此全局变量(对象)会在 main 函数开始前创建,在 main 函数结束后销毁。因此全局变量(对象)的构造函数会先用 main 开始前调用。同样析构函数也会在 main 函数结束后调用。
示例
// filename: global_object.cpp
#include <iostream>
using namespace std;
class Square {
public:
Square(double l=1) {
cout << "边长为" << l << "的正方形被创建!" << endl;
length = l;
}
~Square() {
cout << "边长为" << length << "的正方形被销毁!" << endl;
}
private:
double length;
};
Square s1(10);
Square s2(20);
int main(int argc, char * argv[]) {
Square s3(3);
Square s4(4);
return 0;
}
编译和运行结果如下:
weimz@mzstudio:~$ g++ -o global_object global_object.cpp
weimz@mzstudio:~$ ./global_object
边长为10的正方形被创建!
边长为20的正方形被创建!
边长为3的正方形被创建!
边长为4的正方形被创建!
边长为4的正方形被销毁!
边长为3的正方形被销毁!
边长为20的正方形被销毁!
边长为10的正方形被销毁!
从上述运行结果中可以看出,全局对象 s1 和 s2 先创建,然后是 main 函数内的 s3 和 s4 创建。
对象销毁的顺序和对象创建的顺序相反。先销毁 main 函数内的 s4 和 s3,然后是全局对象 s2 和 s1。
实验:
完成上述示例的编写和运行,体会对象创建和销毁的顺序。