Вызов конструктора копирования на самом себе c ++ - PullRequest
0 голосов
/ 29 мая 2020

Я реализую матричный класс с некоторыми арифметическими c. Это то, что у меня было как функция для добавления:

...
Matrix Matrix::operator+(const Matrix& other) const
{
    Matrix out = *this;
    out += scalar;
    return out;
}

void Matrix::operator+=(const Matrix& other)
{
    // Actually adding the numbers. 
}

Совсем недавно я обнаружил, что помимо конструктора копирования я также должен определить конструктор перемещения, чтобы избежать ненужного копирования моего класса матрицы. Так я и сделал. И вот где все идет не так. В первой строке моего оператора + он теперь будет перемещаться вместо копирования, что, конечно, вызывает ошибку памяти.

Итак, я изменил следующее:

...
MatrixNT::MatrixNT(const MatrixNT&& other)
{
    m_logger = LogWrapper::getLogger("MatrixNT");
    m_rows = other.m_rows;
    m_cols = other.m_cols;

    m_data = other.m_data;
}
...

Matrix Matrix::operator+(const Matrix& other) const
{
    Matrix out(*this);
    out += scalar;
    return out;
}

Это правильный способ вызова конструктора копирования? Это кажется немного странным, снова использовать оператор уважения. Я не могу найти по нему примеров.

...