gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 07:25:05 25 4
gpt4 key购买 nike

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com