巩固下c++基础,代码如下:
#include <iostream>
#include <vector>
#include <map>
#include <string>
std::vector<void*> structure;
std::map<void*, std::string> info;
class test1
{
public:
test1(){
structure.push_back(this);
}
~test1(){
std::cout<<this<<"---~test1\n";
}
};
class test2
{
public:
test2(){
structure.push_back(this);
}
~test2(){
std::cout<<this<<"---~test2\n";
}
static test1 test1_;
};
class test3
{
public:
test3(){
structure.push_back(this);
}
~test3(){
std::cout<<this<<"---~test3\n";
}
};
class test4
{
public:
test4(){
structure.push_back(this);
}
~test4(){
std::cout<<this<<"---~test4\n";
}
static test3 test3_;
};
void OnExit()
{
std::cout<<"--------------------------------------\n";
std::cout<<"Call OnExit\n";
}
static test3 static_test3_;
static test1 static_test1_;
test2 test2_;
test1 test1_;
test3 test4::test3_;
test1 test2::test1_;
int main(int argc, _TCHAR* argv[])
{
std::cout<<"--------------------------------------\n";
std::cout<<"Regist OnExit\n";
atexit(OnExit);
info[&test2_] = "全局变量test2_";
info[&test1_] = "全局变量test1_";
info[&static_test1_] = "静态全局变量test1_";
info[&static_test3_] = "静态全局变量test3_";
info[&test2::test1_] = "静态类变量test2::test1_";
info[&test4::test3_] = "静态类变量test4::test3_";
std::cout<<"------------------构造----------------\n";
for(auto iter = structure.begin(), end = structure.end(); iter != end; ++iter)
{
std::cout<<*iter<<"---"<<info[*iter]<<"\n";
}
return 0;
}
执行结果:
总结:
1.全局变量,静态全局变量,类静态变量的构造顺序依赖于其定义顺序。
2.全局变量,静态全局变量,类静态变量的析构顺序和构造顺序相反。
3.atexit回调函数调用先与全局变量,静态全局变量,类静态变量析构函数调用。