http://blog.csdn.net/mznewfacer/article/details/6897952

全局对象的构造函数将在main函数之前运行。析构在main函数之后运行。静态全局必然也具有这特性

函数内部的static对象的构造函数将在第一次调用该函数时调用,main函数结束之后执行。但其析构会在全局对象之前,因为所有对象的析构顺序和构造顺序相反,即全局对象在函数内部的static对象前构造,在后面析构。若包含静态局部对象的函数未被调用,则也不进行析构。

可以通过atexit函数指定当离开main或者调用exit时所要执行的动作。其在所有的析构函数之前运行。

 

class Obj

{

        char cT;

        public:

        Obj(char c)

        {

                cT=c;

                cout<<"Obj::Obj()  for "<<c<<endl;

        }

        ~Obj()

        { 

                cout<<"Obj::~Obj() for "<<cT<<endl;

        }

};

 

Obj A('A'); //全局对象在main之前构造

void f()

{

        static Obj B('B');

}

 

void main()

{

        cout<<"inside  main()"<<endl;

        f();

        cout<<"leaving main()"<<endl;

}

OUTPUT:

Obj::Obj()  for A

inside  main()

Obj::Obj()  for B

leaving main()

Obj::~Obj() for B //在A前析构

Obj::~Obj() for A

Copyright © 2024 无忧consume
Powered by .NET 8.0 on Kubernetes