C++ 运算符重载=和模板双倍值仅在int中起作用
在调用我的类VecXd example->VecXd x,y,z时,在模板旁边和main中处理向量添加的项目;返回的值是正确的,但是当再次使用VecXd x,y,z从main调用时;my operator=返回的值超出范围,有人知道为什么吗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
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++