【发布时间】:2020-04-14 09:04:48
【问题描述】:
我正在考虑如何使用加(减)和乘操作来定义一类实矩阵 NxN。我正在寻找高效的内存使用。
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&);
【问题讨论】:
-
不清楚你想把什么移动到哪里,或者你想避免什么副本。参数已经是引用了。
-
顺便说一句,您应该注意rule of 3/5,或者使用
std::vector而不是double** -
@idclev463035818:
(a+b)+c创建 2 个临时对象(a+b 和最终总和),而(a+b)+=c只会创建一个(但语法不好)。 -
@Jarod42 我不得不三思而后行才能明白为什么搬家有帮助,但我仍然认为问题可能更清楚,所以我没有删除评论
-
@idclev463035818:实际上它并没有移动,但是我们避免通过重用一个参数来分配新的矩阵。而不是
auto res = tmp + var2; return res;,我们可能会做tmp += var2; return tmp;。但我同意这还不清楚。
标签: c++ matrix move operator-keyword memory-efficient