在调用我的类VecXd示例-> VecXd x、y、z时,处理一个与模板一起添加向量的项目,并在main中调用它们;返回的值是正确的,但是当main再次使用VecXd x、y、z调用时;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;
}
};发布于 2013-09-19 14:16:06
在释放任何以前分配的内存之前,通过将vecArr分配给新分配的内存来泄漏内存。
除此之外,代码的正确性取决于这里没有提供的部分,特别是vecArr和dimension的正确维护。
为什么不经常使用std::vector std::array**?**或,其维数在编译时是已知的并且是固定的。然后,使用std::array是理想的。您可以通过进一步的方法(例如,向量和)和点积等方法(通过公共继承或将其作为数据成员)扩展它。
https://stackoverflow.com/questions/18896874
复制相似问题