调用复制构造函数而不是 Operator=

Copy constructor called instead of Operator=

我正在尝试用矩阵做一个简单的练习,我想实现这个操作:矩阵 a、矩阵 b、矩阵 c(a)、矩阵 d = a、矩阵 e = a + b。目前我保持简单,但稍后我想做同样的事情,但使用动态分配,然后使用智能指针。

我声明了一个显式复制构造函数并且我重载了 operator=,我还声明了一个析构函数所以我有三的规则。

这是我的功能:

Matrix& Matrix::operator=(const Matrix& opEven)
{
    std::cout << "Operator = " << std::endl;
    for (int i = 0; i < ORD; i++)
    {
        for (int j = 0; j < ORD; j++)
        {
            arr1[i][j] = opEven.arr1[i][j];
        }
    }

    return *this;
}

Matrix::Matrix(const Matrix& obj) 
{
    std::cout << "Constructing matrix using copy c-tor." << std::endl;
    for (int i = 0; i < ORD; i++)
    {
        for (int j = 0; j < ORD; j++)
        {
            arr1[i][j] = obj.arr1[i][j];
        }
    }
}

问题是,当我尝试使用 Matrix d = a 时,我的编译器使用复制构造函数,而不是我的 operator=。

Output:

当你这样称呼它时

Martix a;
Matrix b = a; 

它总是使用复制构造函数。试试这个:

Matrix a;
Matrix b:
b = a;

基本上,Matrix a = b;Matrix a(b); 是一回事,因为您正在 构造 矩阵 a 使用矩阵 b ,因此会导致复制构造函数调用。