C++ 运算符重载=和模板双倍值仅在int中起作用

C++ 运算符重载=和模板双倍值仅在int中起作用,c++,templates,overloading,operator-keyword,C++,Templates,Overloading,Operator Keyword,在调用我的类VecXd example->VecXd x,y,z时,在模板旁边和main中处理向量添加的项目;返回的值是正确的,但是当再次使用VecXd x,y,z从main调用时;my operator=返回的值超出范围,有人知道为什么吗 template< class V > class VecXd { std::size_t dimension; V* vecArr; public: ... VecXd& operator=(const VecXd &a

在调用我的类VecXd example->VecXd x,y,z时,在模板旁边和main中处理向量添加的项目;返回的值是正确的,但是当再次使用VecXd x,y,z从main调用时;my 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;    
   }
};
模板
类VecXd{
标准:尺寸和尺寸;
V*vecArr;
公众:
...
VecXd&operator=(常量VecXd&rhs)
{ 

//cout在释放任何以前分配的内存之前,通过将
vecArr
分配给新分配的内存,您正在泄漏内存

除此之外,代码的正确性取决于此处未提供的部分,特别是
vecArr
dimension
的正确维护


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

模板类是模板,您可以编辑您的问题。请不要在评论中修改您的问题,这会使阅读变得更困难。它并没有出现,只是不停地说模板不包括该类,但它现在已经修复了!:Dy您应该添加代码来演示您的问题复制赋值运算符在这里有内存泄漏。为什么不使用
std::vector
?您在内存泄漏和释放vecArr和维度方面做得很好。我将研究我的程序,std::vector和array会使生活更轻松,但作为项目的一部分,我的目标是在没有
std
库的情况下悲惨地生活在没有它们的情况下不是真正的C++