Можно ли реализовать оператор move + / operator- / operator * для класса Matrix? - PullRequest
0 голосов
/ 14 апреля 2020

Я думаю о том, как определить класс вещественных матриц NxN с помощью операций Add (Вычитание) и Multiply. Я ищу эффективное использование памяти.

class Matrix {
private:
    std::size_t _size_n;
    double **_pMatrix;

public:
    Matrix(const size_t n);

    ~Matrix();

    double &operator()(size_t, const size_t);

    double operator()(size_t, const size_t) const;

    size_t size_n() const { return _size_n; }
};

std::ostream &operator<<(std::ostream &, const Matrix &);

Matrix operator+(const Matrix&, const Matrix&);
Matrix operator-(const Matrix&, const Matrix&);
Matrix operator*(const Matrix&, const Matrix&);

1 Ответ

1 голос
/ 14 апреля 2020

Да, вы можете иметь дополнительные перегрузки

Matrix/*&&*/ operator+(const Matrix&, Matrix&&);
Matrix/*&&*/ operator+(Matrix&&, const Matrix&);
Matrix/*&&*/ operator+(Matrix&&, Matrix&&);

Для повторного использования памяти одного из временных.

Все они могут быть реализованы с помощью Matrix& operator += (Matrix&, const Matrix&), изменив порядок на + симметрично , operator - потребуется выделенный код.

Другой способ оптимизировать память - использовать шаблоны выражений вместо непосредственного вычисления результата.

У него есть недостаток, связанный с проблемой времени жизни. (особенно с auto), хотя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...