【问题标题】:Operator overloading= and templates double value does not work only int运算符重载= 和模板双值仅 int 不起作用
【发布时间】:2013-09-19 14:04:02
【问题描述】:

在调用我的类 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;    
   }
};

【问题讨论】:

  • 模板类是模板
  • 您可以编辑您的问题。请不要在 cmets 中修改您的问题,这会使阅读变得更加困难。
  • 它没有出现,只是一直说模板不包括类,但现在已修复! :D
  • 你应该添加演示问题的代码
  • 你的复制赋值操作符这里有内存泄漏。为什么不使用std::vector

标签: c++ templates overloading operator-keyword


【解决方案1】:

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

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

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

【讨论】:

  • 你在内存泄漏和释放 vecArr 和维度上提出了一个很好的观点,我将研究我的程序,std::vector 和数组会让生活更轻松,但作为项目的一部分,我目标是与他们一起悲伤地生活......
  • 没有 std 库方法,它不是真正的 C++
猜你喜欢
  • 2013-06-17
  • 1970-01-01
  • 1970-01-01
  • 2021-02-12
  • 2016-02-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多