c++ - 运算符重载 = 和模板 double 值仅对 int 不起作用

标签 c++ templates overloading operator-keyword

在调用我的类 VecXd 示例时,正在与模板一起进行 vector 加法项​​目,并在 main 中工作 -> 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;    
   }
};

最佳答案

在释放任何先前分配的内存之前,将 vecArr 分配给新分配的内存会导致内存泄漏。

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

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

关于c++ - 运算符重载 = 和模板 double 值仅对 int 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18896874/

相关文章:

c++ - 为什么如果没有显式范围解析,父类的父方法就无法访问?

c++ - 我如何区分这两个运算符重载?

c++ - Open MP:SIMD循环中的SIMD兼容功能?

c++ - 如何允许其他应用程序打开我需要保持打开的文件?

c++ - 用模板重写的类会使程序变慢(在运行时)

c++ - 我可以从 std::string 继承以提供强类型字符串吗?

c++ - 模板数据结构 - 访问从抽象类派生的模板类的 getter 和 setter

c++ - 隐藏重载的虚函数

c++ - 从没有 key 的散列中查找 unordered_map 中的桶

c++ - 使用 glm::vec< 3 , double > 时出错