一个C++的析构函数的问题,分析一下运行结果的原因
class complex
{
private:
double x;
double y;
public:
complex operator+(complex &comp1);
~complex(void)
{
cout<<"析构函数"<<endl;
}
complex(double a,double b)
{
x = a;
y = b;
}
};
主函数中:
complex a;
complex b;
complex c;
a.get("1+5i");
b.get("3-2i");
c=a+b;
c.show();
return 0;运行结果:析构函数析构函数4+3i析构函数析构函数析构函数
[解决办法]
楼主给出的代码显然不全。
如果operator+按照正常的实现,应该不会输出5个“析构函数”的,应该是输出4个析构函数,即形如:
析构函数 // 销毁c = a + b中,a + b所产生的临时对象4+3i // 输出结果析构函数 // 销毁c析构函数 // 销毁b析构函数 // 销毁a
[解决办法]
operator+返回的是类,必定是一个局部类变量,所以也要打印一次析构
[解决办法]
#include <iostream>#include <string>using namespace std;class complex{private: double x; double y; string m_str;public: complex operator+(complex &comp1) { m_str += " "+ comp1.m_str; return *this; } complex (void){} ~complex(void) { cout<<"析构函数"<<endl; } complex(double a,double b) { x = a; y = b; } void get(string str) { m_str = str; } void show() { cout<<m_str<<endl; } };int main(void){ complex a; complex b; complex c; a.get("1+5i"); b.get("3-2i"); c=a+b; c.show(); return 0;}//析构函数 析构函数 4+3i 析构函数 析构函数 析构函数