Posted on 2012-03-11 19:46
C小加 閱讀(1821)
評(píng)論(1) 編輯 收藏 引用 所屬分類:
C++和面向?qū)ο?/a>
本以為主函數(shù)main是首先被調(diào)用的函數(shù),后來發(fā)現(xiàn)操作系統(tǒng)會(huì)調(diào)用一個(gè)啟動(dòng)函數(shù),對(duì)C++運(yùn)行庫進(jìn)行初始化。
本以為主函數(shù)main被返回之后操作系統(tǒng)將回收資源,卻不知一個(gè)重要的函數(shù)—atexit()。
程序退出的時(shí)候需要一些諸如釋放資源的操作,但是程序的退出有很多種,可能是main函數(shù)結(jié)束范圍一個(gè)值傳遞給exit(),也可能是一些其他的原因,所以需要一種與程序結(jié)束方式無關(guān)的方法來進(jìn)行程序退出時(shí)必要的處理。
函數(shù)原型:int atexit(void(*)(void));
函數(shù)作用:注冊(cè)一個(gè)函數(shù),這個(gè)函數(shù)在程序結(jié)束的時(shí)候被調(diào)用
#include<cstdlib>
#include<iostream>
using namespace std;
void fun1()
{
cout<<"fun1"<<endl;
}
void fun2()
{
cout<<"fun2"<<endl;
}
int main()
{
atexit(fun1);//注冊(cè)fun1,主函數(shù)終止時(shí)調(diào)用
atexit(fun2);//注冊(cè)fun2,主函數(shù)終止時(shí)調(diào)用
cout<<"mian exit"<<endl;
return 0;
}
//運(yùn)行結(jié)果:
main exit
fun2
fun1
從結(jié)果中可以發(fā)現(xiàn)fun1和fun2兩個(gè)函數(shù)在主函數(shù)結(jié)束之后被調(diào)用,而且調(diào)用的順序與注冊(cè)的順序相反。