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

问题描述 投票:0回答:1

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

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的情况下使用它的另一种方法是什么?我想在这种情况下构建一个实现两个矩阵交换的朋友函数?

c++ class std
1个回答
0
投票

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

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

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

  1. 使其成为非成员friend功能。
  2. 使它成为static成员函数。
  3. 使它成为非static成员函数。

我可能会选择一个static成员函数,但我没有看到使用其他两个中的任何一个的任何缺点。

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

© www.soinside.com 2019 - 2024. All rights reserved.