#include "stdafx.h" #include "stdio.h" #include "Windows.h" #include "iostream" using namespace std; #define Num 10000000 // 一千万 class Student { private: string m_strName; int m_iAge; public: Student(string strName, int iAge) { m_strName = strName; // 赋值 m_iAge = iAge; } ~Student(){} }; class Teacher { private: string m_strName; int m_iAge; public: Teacher(string strName, int iAge):m_strName(strName),m_iAge(iAge) { // 初始化 } ~Teacher(){} }; int _tmain(int argc, _TCHAR* argv[]) { int iStartTime = 0; int iDuration = 0; iStartTime = GetTickCount(); for(int i=0;i<Num;++i) { Student stu1("xiaoming",15); } iDuration = GetTickCount()-iStartTime; printf("\nStudent Init Duration:%d\n",iDuration); iStartTime = GetTickCount(); for(int i=0;i<Num;++i) { Teacher tech1("xiaoming",15); } iDuration = GetTickCount()-iStartTime; printf("Teacher Init Duration:%d\n",iDuration); getchar(); return 0; }
输出为:
Student Init Duration:6459 Teacher Init Duration:5912
由于赋值首先调用default函数赋初值,然后立刻再对它们赋予新值,default构造函数所做的一切就浪费了。
初始化列表的做法避免了这一问题,所以效率更高。