首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >运算符overloading=和模板双值不能只工作int。

运算符overloading=和模板双值不能只工作int。
EN

Stack Overflow用户
提问于 2013-09-19 14:04:02
回答 1查看 89关注 0票数 0

在调用我的类VecXd示例-> VecXd x、y、z时,处理一个与模板一起添加向量的项目,并在main中调用它们;返回的值是正确的,但是当main再次使用VecXd x、y、z调用时;my operator=返回的值超出了范围,有人知道为什么吗?

代码语言:javascript
复制
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;    
   }
};
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-09-19 14:16:06

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

除此之外,代码的正确性取决于这里没有提供的部分,特别是vecArrdimension的正确维护。

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18896874

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档