通过这个题,让我对构造函数和析构函数的生命周期有了新的理解;
首先我们要明白的是,构造函数是定义的时候调用的,析构函数是对象生命周期结束的时候调用的;
以下是测试代码:
第一步我们很明确的是先构造a,再构造b,a,b的构造顺序是我们明白的,同时我们也知道栈的特点是后进先出;
c是全局变量,d是静态变量,c,d在整个程序运行期间都存在,main()结束的时候才销毁。同时c是在main函数调用之前,就已经被定义出来了;
第二步:静态变量是在函数第一次调用的时候初始化的;
假设我们改成这样,a,b会被初始化两次,而d只会在第一个f函数中被初始化。当调用第二个f函数时,d将不会被初始化;
所以构造函数的顺序是:C A B D;
程序调试结果:
析构顺序:(谁先定义谁后析构)
c肯定是最后析构;
B在A之前析构;
因为D是存在静态区的,而不是存在当前栈帧的,它和全局变量一样,会在main()函数结束的时候销毁;
C是在main函数调用之前定义,而D是在main()函数第一次调用时定义,所以C最后销毁;
所以析构顺序为:BADC;