Statements executed before and after the main function

#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
请按任意键继续. . .
*/

 

Guess you like

Origin blog.csdn.net/csdn1126274345/article/details/104592615