1. 程式人生 > >建構函式、解構函式和變數的生存期

建構函式、解構函式和變數的生存期

//referred from Wei Guo, Peking University
#include<iostream>
using namespace std;

class Demo{
    int id;
public:
    Demo(int i)
    {
        id = i;
        cout<<"id="<<id<<"constructed"<<endl;
    }
    ~Demo()
    {
        cout<<"id="<<id<<"destructed"<<endl;
    }
};
Demo d1(1);
void Func()
{
    static Demo d2(2);
    Demo d3(3);
    cout<<"func"<<endl;
}
int main()
{
    Demo d4(4);
    d4 = 6;
    cout<<"main"<<endl;
    {
        Demo d5(5);
    }
    Func();
    cout<<"main ends"<<endl;
    return 0;
}

上述程式碼是節選自郭煒老師《新標準c++程式設計》p44-45的程式碼,非常有價值。而且全書精煉有趣,發人深省,是一本入門的好書。

程式的輸出結果:

id=1 constructed
id=4 constructed
id=6 constructed
id=6 destructed
main
id=5 constructed
id=5 destructed
id=2 constructed
id=3 constructed
func
id=3 destructed
main ends
id=6 constructed
id=2 constructed
id=1 constructed

global variable 當程式結束時才會消亡, static variable 本質上也是全域性變數,所以d1和d2按生成順序的反序消亡;

注意d4 = 6那一句。