使用std:swap(在赋值运算符的实现中)

时间:2017-12-18 00:18:40

标签: c++ class std

我在某些地方看到类矩阵的assignemt运算符的实现如下所示:

class Matrix
{
private:

    int rows;
    int cols;
    int **mat;

public:

    Matrix& operator=(const Matrix& m)
        {
            if ( this != &m )
            {
                Matrix temp(m);
                std::swap(temp.rows, rows);
                std::swap(temp.cols, cols);
                std::swap(temp.mat, mat);
            }
            return *this;
        }
}

现在,假设我想使用交换功能,在不编写std:swap的情况下使用它的另一种方法是什么?我想在这种情况下构建一个实现两个矩阵交换的朋友函数吗?

1 个答案:

答案 0 :(得分:0)

  

现在,假设我想使用交换功能,在不编写std:swap的情况下使用它的另一种方法是什么?我想在这种情况下构建一个实现两个矩阵交换的朋友函数吗?

您必须交换两个Matrix个对象。无论是在operator=函数中执行还是在其他函数中执行此操作都是次要的。

作为一种惯例,我建议创建一个交换两个Matrix对象的函数,并使用它来实现operator=函数。你有各种各样的选择。

  1. 将其设为非会员friend功能。
  2. 将其设为static会员功能。
  3. 使其成为非static成员函数。
  4. 我可能会选择一个static会员功能,但我没有看到使用其他两个功能之一的任何缺点。

    需要注意的一点是,您最终将使用std::swap来交换该函数中Matrix个对象的成员变量。它让我觉得这对你很关心。