C++ 对象构造与析构以及内存布局(2)

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.构造对象本身
 
以上同等级的构造顺序遵循从左到右的申明顺序。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/5798b4fb80ef64319edb4f0969d9f697.html