X *pX = new X;
std::cout<<"--------------------------------------------"<<'\n';
cout.setf(ios::showbase | ios::uppercase); //设置基指示符输出和数值中的字母大写输出
std::multimap<__int64,std::string,classcomp> ::iterator iter;
for (iter = m_Construtor.begin();iter != m_Construtor.end();++iter)//遍历
{
cout<<std::hex<<(*iter).first<<" "<<(*iter).second<<endl;
}
std::cout<<"--------------------------------------------"<<'\n';
delete pX;
pX = NULL;
std::cin>>i;
return 0;
}
以上程序的运行结果为:
Constructor B1 005F7F94
Constructor V1 005F7F94
Constructor B1 005F7F98
Constructor B2 005F7F9C
Constructor V2 005F7F98
Constructor D1 005F7F88
Constructor B3 005F7F80
Constructor D2 005F7F80
Constructor M1 005F7F8C
Constructor M2 005F7F90
Constructor X 005F7F80
--------------------------------------------
0X5F7F80 Constructor B3
0X5F7F80 Constructor D2
0X5F7F80 Constructor X
0X5F7F88 Constructor D1
0X5F7F8C Constructor M1
0X5F7F90 Constructor M2
0X5F7F94 Constructor B1
0X5F7F94 Constructor V1
0X5F7F98 Constructor B1
0X5F7F98 Constructor V2
0X5F7F9C Constructor B2
--------------------------------------------
Destructor X 005F7F80
Destructor M2 005F7F90
Destructor M1 005F7F8C
Destructor D2 005F7F80
Destructor B3 005F7F80
Destructor D1 005F7F88
Destructor V2 005F7F98
Destructor B2 005F7F9C
Destructor B1 005F7F98
Destructor V1 005F7F94
Destructor B1 005F7F94
可以看出对象的构造顺序和书中提示到的顺序一致
1.首先构造虚基类子对象
2.其次构造非虚基类子对象.
3.构造成员本身
4.构造对象本身
以上同等级的构造顺序遵循从左到右的申明顺序。