#include <iostream>
using namespace std;
class A
{
public:
A(string a) : m_a(a) {
cout << "A() m_a ==== " << m_a.c_str() << endl;
}
~A() {
cout << "~A() ==== " << m_a.c_str() << endl;
}
private:
string m_a;
};
A a("global");
static A b("static ");//全局的按顺序在main之前先构造,main之后反序析构
void fun()
{
A local("local in fun");
static A staticlocal("staticlocal in fun");//静态局部变量调用时才执行
}
void exitfun1()
{
cout << "calling exitfun1()" << endl;
}
void exitfun2()
{
cout << "calling exitfun2()" << endl;
}
int main()
{
cout << "enter main." << endl;
atexit(exitfun1);
atexit(exitfun2);//全局析构之前调用注册的函数。
A inmain("inmain");
static A staticlocalinmain("staticinmain.");
fun();
cout << "leave main." << endl;
return 0;
}
/*
A() m_a ==== global
A() m_a ==== static
enter main.
A() m_a ==== inmain
A() m_a ==== staticinmain.
A() m_a ==== local in fun
A() m_a ==== staticlocal in fun
~A() ==== local in fun
leave main.//main退出之前只执行了非静态局部变量的析构
~A() ==== inmain
~A() ==== staticlocal in fun
~A() ==== staticinmain.
calling exitfun2()
calling exitfun1()
~A() ==== static
~A() ==== global
请按任意键继续. . .
*/