复制分配操作员与移动分配操作员

时间:2014-09-26 15:10:27

标签: c++

我只是对复制赋值运算符和移动赋值运算符的运行时有疑问。我希望移动赋值运算符运行得更快,但我发现它们以完全相同的速度运行(或多或少)。

这让我相信我做了一些不正确的事情,或者我正在复制我不应该做的事情。如果有人可以对此有所了解,我将不胜感激。

复制赋值运算符(运行时间为1.235秒):

w3::DArray2d& w3::DArray2d::operator=(w3::DArray2d& rhs){

    // std::cout << "assignment operator" << std::endl;

    if ( this != &rhs )
    {   

        delete [] array;

        array = new double*[rhs.columns];

        for (int i=0; i < rhs.columns; i++){
            array[i] = new double[rhs.rows];
        }


        this->rows = rhs.rows;
        this->columns = rhs.columns;

        // std::cout << this->rows << std::endl;
        // std::cout << this->columns << std::endl;

        for(int a = 0; a < rhs.rows; a++){
            for(int b = 0; b < rhs.columns; b++){
                array[a][b] = rhs.array[a][b];
            }
        }
    }

    return *this;

}

移动分配操作员(运行时1.233s):

w3::DArray2d& w3::DArray2d::operator=(w3::DArray2d::DArray2d&& rhs){

    if(this != &rhs){
          rows = std::move(rhs.rows);
          columns = std::move(rhs.columns);
          array = std::move(rhs.array);

          // reset rhs
          rhs.rows = 0;
          rhs.columns = 0;
          rhs.array = nullptr;
      }
      return *this;

}

这是5000x5000二维数组的运行时,使用当前时间作为种子填充从0.00到1.00的随机值。

这是我计算时间的方式:

#define TIME(start, end) double((end) - (start)) / CLOCKS_PER_SEC

        std::clock_t cs, ce;

        cs = std::clock();
        a = std::move(b);
        ce = std::clock();
        std::cout << "Move Assignment " << TIME(cs, ce) << " seconds";
        std::cout << " - a.check = " << a.check();
        std::cout << " - b.check = " << b.check() << std::endl;

0 个答案:

没有答案