在调用我的类 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
分配给新分配的内存会导致内存泄漏。
除此之外,您的代码的正确性取决于此处未提供的部分,特别是 vecArr
和 dimension
的正确维护。
为什么不使用 std::vector
或 std::array
? 通常,维数在编译时已知并且是固定的.然后使用 std::array
是理想的。您可以通过进一步的方法(例如 vector 和和点积等)扩展它(通过公共(public)继承或将其作为数据成员)。
关于c++ - 运算符重载 = 和模板 double 值仅对 int 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18896874/