c++ - 如何重载 + 来对 C++ 中的 2 个矩阵对象求和?

标签 c++ unique-ptr

我有这门课

class Matrix
{
    int size;

    std::unique_ptr<std::unique_ptr<int[]>[]>  val;

public:

    Matrix(int size1)
    {
        size=size1;
        val=std::make_unique< std::unique_ptr<int[]>[] >(size);

        ...
    }

...移动构造函数,移动赋值运算符

    Matrix& operator+(Matrix &m)
    {
        Matrix sumMatrix(size);
        for ( int i = 0; i < size; ++i)
        {
            for (int j = 0; j < size; ++j){
                sumMatrix.val[i][j]=this->val[i][j]+m.val[i][j];
            }

        }
        return sumMatrix;
    }

和主要:

...
Matrix e=b+c;
    std::cout<<"e="<<std::endl;
    e.print();

我有这个错误:

warning: reference to local variable 'sumMatrix' returned [-Wreturn-local-addr] Matrix sumMatrix(size);

有人可以帮我解决这个问题吗?

最佳答案

按值返回,就像大多数情况下对 operator+ 所做的那样:

//   vvv--Removed &     vvvvv-----vvvvv--Const is more appropriate here
Matrix operator+(Matrix const &m) const { ... }

这将需要一个复制构造函数,请确保添加它。另请注意,您可能应该将 for 循环逻辑收集到 operator+= 中,并显着简化 operator+,同时为最终用户提供更多功能:

Matrix& operator+=(Matrix const& m) {
  for (int i = 0; i < size; ++i) {
    for (int j = 0; j < size; ++j) {
      //vvv--No need for this-> in C++    
      val[i][j] += m.val[i][j];
    }
  }
  return *this;
}

Matrix operator+(Matrix const& m) const {
  Matrix sumMatrix{m}; // requires a copy constructor.
  sumMatrix += *this;
  return sumMatrix;
}

关于c++ - 如何重载 + 来对 C++ 中的 2 个矩阵对象求和?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61718942/

相关文章:

未分配正在释放的 C++ 指针(可能是 unique_ptr 或 boost::ublas 的问题)

c++ - lambda 函数中的 std::unique_ptr 导致段错误

c++ - 使用unique_ptr的链表的弹出方法

c++ - 使用 std::unique_ptr 的递归函数内存泄漏

c++ - 跨 g++-nvcc 边界(包括内核)使用函数模板化代码

c++ - MinGW 上的 localtime_r 支持

c++ - 在数组中查找最大元素 OpenMP 和 PPL 版本运行速度比串行代码慢得多

c++ - 如何将 unique_ptr 移出 vector<unique_ptr<Foo>>?

c++ - 如何使用 C++ 库函数或 STL 对字符串进行排序?

c++ - 为什么在这个 UDP 客户端/服务器示例中不需要绑定(bind)客户端套接字?