C++11:移动构造函数的测试
Posted 2018shawn
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++11:移动构造函数的测试相关的知识,希望对你有一定的参考价值。
C++11:移动构造函数的测试
代码如下:
#include <iostream> #include <stddef.h> #include <Windows.h> using namespace std; class CTest private: std::size_t size; char* buffer; public: CTest(std::size_t size) : size(size), buffer(nullptr) buffer = new char[size]; ~CTest() delete[] buffer; CTest(const CTest& other) : size(other.size), buffer(nullptr) buffer = new char[size]; CTest(CTest&& other) : size(other.size), buffer(other.buffer) other.buffer = nullptr; ; template <typename Func> __int64 Benchmark(Func f, size_t count) // LARGE_INTEGER m_liPerfFreq=0; // //获取每秒多少CPU Performance Tick // QueryPerformanceFrequency(&m_liPerfFreq); LARGE_INTEGER li = ; QueryPerformanceCounter(&li); __int64 start = li.QuadPart; f(count); QueryPerformanceCounter(&li); return (li.QuadPart - start);//* 1000 / m_liPerfFreq.QuadPart; void Alloc_Ref(size_t count) CTest t(1024); for(size_t i = 0; i < count; ++i) CTest c(t); void Alloc_Move(size_t count) CTest t(1024); for(size_t i = 0; i < count; ++i) CTest c(std::move(t)); //CTest c(CTest(1024)); int _tmain(int argc, _TCHAR* argv[]) for(int i= 0; i<10 ;++i) cout << "Move: "<< Benchmark(Alloc_Move, 1000000) << " ms." << endl; cout << "Ref: " << Benchmark(Alloc_Ref, 1000000) << " ms." << endl; system("pause"); return 0;
程序运行结果如下:
结论:可见移动构造函数是拷贝构造函数的1-3倍。
参考链接:
VS 2010, Move constructor only reached after move() and slower than copy constructor?
以上是关于C++11:移动构造函数的测试的主要内容,如果未能解决你的问题,请参考以下文章
在 Visual Studio 中创建构造函数的代码片段或快捷方式
cpp►C++11右值引用移动语义移动构造函数移动赋值运算符
cpp►C++11右值引用移动语义移动构造函数移动赋值运算符