首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

VC2010中C++的右值引述新特性

2012-10-28 
VC2010中C++的右值引用新特性// RightValue.cpp : Defines the entry point for the console application.

VC2010中C++的右值引用新特性

// RightValue.cpp : Defines the entry point for the console application.//#include "stdafx.h"#include <iostream>#include <algorithm>#include <vector>#include <ctime>using namespace std;class CMyObj{protected:unsigned m_iBufferSize;char* m_pBuffer;public:CMyObj():m_iBufferSize(0),m_pBuffer(NULL){}CMyObj(unsigned int iBufSize):m_iBufferSize(iBufSize){m_pBuffer = new char[iBufSize];memset(m_pBuffer,0,m_iBufferSize);}CMyObj(const CMyObj& objSrc){m_iBufferSize = objSrc.m_iBufferSize;if(m_iBufferSize > 0){m_pBuffer = new char[m_iBufferSize];memcpy(m_pBuffer,objSrc.m_pBuffer,m_iBufferSize);}}~CMyObj(){if(m_pBuffer) delete m_pBuffer;m_pBuffer = NULL;}};class CMyObjWithMoveConstructor:public CMyObj{public:CMyObjWithMoveConstructor():CMyObj(){}CMyObjWithMoveConstructor(int iBufSize):CMyObj(iBufSize){}//copy constructorCMyObjWithMoveConstructor(const CMyObjWithMoveConstructor& myObj):CMyObj(myObj){}//move constructorCMyObjWithMoveConstructor(CMyObjWithMoveConstructor&& myObj){m_iBufferSize = myObj.m_iBufferSize;m_pBuffer = myObj.m_pBuffer;myObj.m_pBuffer = NULL;myObj.m_iBufferSize = 0;}};int _tmain(int argc, _TCHAR* argv[]){static int iBufSize = 1024*1024*2; //2Mstatic int iObjCnt = 100;clock_t t1,t2;double times;vector<CMyObj> vec;t1 = clock();//没有右值引用for( int i = 0; i < iObjCnt; i ++){ //加入100个元素vec.push_back( CMyObj(iBufSize));}t2 = clock();times = (double)(t2-t1)/CLOCKS_PER_SEC;cout<<"without move constructor:"<<times<<endl;vector<CMyObjWithMoveConstructor> vec2;t1 = clock();//有右值引用for( int j = 0; j < iObjCnt; j ++){ //加入100个元素vec2.push_back( CMyObjWithMoveConstructor(iBufSize));}t2 = clock();times = (double)(t2-t1)/CLOCKS_PER_SEC;cout<<"with move constructor:"<<times<<endl;return 0;}//最后结果://without move constructor:1.48//with move constructor:0.16//相差了9.25倍 
?

热点排行