0

在调用我的类 VecXd 示例-> VecXd x,y,z 时,在模板旁边和主要中处理矢量添加项目;返回的值是正确的,但是当再次使用 VecXd x,y,z 从 main 调用时;我的 operator= 返回的值超出了范围,有人知道为什么吗?

template< class V >
class VecXd {
  std::size_t dimension;
  V* vecArr;
public:
  ...
  VecXd& operator=(const VecXd &rhs)
  { 
     // cout << rhs.vecArr[0] << "-= value at 0 rhs" << endl; value is fine
     dimension = rhs.dimension;   
     cout << dimension << "operator= dimension test!" << endl; ///dimension check
     vecArr = new V[dimension];

     for(int i = 0; i < rhs.dimension; i++)
     {
        vecArr[i] = rhs.vecArr[i];
        cout << vecArr[i] << " our new value (op=)" << endl;                 
     } 

     return *this;    
   }
};
4

1 回答 1

1

vecArr在释放任何先前分配的内存之前,您通过分配新分配的内存来泄漏内存。

除此之外,您的代码的正确性取决于此处未提供的部分,尤其是正确维护vecArrdimension.

为什么不使用std::vectoror std::array通常,维数在编译时是已知的并且是固定的。然后使用std::array是理想的。您可以通过进一步的方法来扩展它(通过公共继承或将其作为数据成员),例如向量和和点积等。

于 2013-09-19T14:16:06.227 回答