我对c ++中的面向对象编程有点陌生,我一直在尝试为我创建的Complex类重载c ++中的subtraction(-)运算符。除我的程序异常终止外,一切正常。
以下是我一直在尝试的操作:
#include<iostream>
#include<cstdlib>
class Complex{
//Data-members
private:
int re, im;
//methods
public:
//Constructor
Complex(){ /*default Constructor*/ }
Complex(const int& re_, const int& im_):re(re_), im(im_){}
//Subtraction(-) operator overloading
Complex operator-(const Complex& op)
{
Complex res(this->re - op.re, this->im - op.im);
return res;
}
//get-set methods for re
int getReal(){ return re; }
void setReal(const int& re){ this->re = re; }
//get-set methods for im
int getImaginary(){ return im; }
void setImaginary(const int& im){ this->im = im; }
//Destructor
~Complex(){ free(this); }
};
int main()
{
Complex a(2, 3), b(3, 5);
Complex d = a - b;
std::cout<<"d.re = "<<d.getReal()<<" d.im = "<<d.getImaginary()<<"\n";
return 0;
}
任何人都可以解释错误原因。
答案 0 :(得分:4)
永远不要做free(this)
,至少要在析构函数中做。通过编译器生成的代码或由用户执行delete
或delete[]
,用户可以在析构函数之外释放对象的内存。
实际上,这是导致您出现问题的原因,因为创建的对象从未分配过malloc
。
在这种情况下,正确的解决方案是不仅删除free
调用,而且删除整个析构函数,因为该类不需要此调用。