第九章、类和对象(高级)

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的正方形被销毁!

从上述运行结果中可以看出,全局对象 s1s2 先创建,然后是 main 函数内的 s3s4 创建。 对象销毁的顺序和对象创建的顺序相反。先销毁 main 函数内的 s4s3,然后是全局对象 s2s1

实验:

完成上述示例的编写和运行,体会对象创建和销毁的顺序。