Я реализую матричный класс с некоторыми арифметическими 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;
}
Это правильный способ вызова конструктора копирования? Это кажется немного странным, снова использовать оператор уважения. Я не могу найти по нему примеров.