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右值引用移动语义移动构造函数移动赋值运算符

C++11新特性:20—— C++11移动构造函数的功能和用法

移动构造函数

C++5大构造函数