C++对象的创建及析构有关问题

C++对象的创建及析构问题
#include <iostream>
using namespace std;
class Complex
{
public:
Complex(double r,double i)
{ real=r;imag=i; }
~Complex(){cout<<"析构函数被调用"<<endl;}
void display();
Complex operator +(Complex c2);
Complex operator -(Complex c2);
private:
double real;
double imag;
};
Complex Complex::operator+(Complex c2)
{ //创建一个临时无名对象作为返回值
return Complex(real+c2.real,imag+c2.imag);
}
Complex Complex::operator-(Complex c2)
{
return Complex(real-c2.real,imag-c2.imag);
}
void Complex::display()
{
cout<<"real:"<<real<<endl
<<"imag:"<<imag<<endl;
}
int main()
{
Complex c1(1.0,2.0);
Complex c2(2.0,3.0);
c1=c1+c2;
c1.display();
return 0;
}

运行结果:
C++对象的创建及析构有关问题
为什么会有四次呢?我认为应该会调用3次析构函数,一次临时无名对象,两次实例化对象的析构,另一个调用的是哪里的呢。
请大家不吝赐教,尽量详细些。
析构函数

------解决方案--------------------
楼主定义的+法,Complex operator+(Complex c2),这样在传递参数的时候,也会构造一个临时的匿名对象,这个对象是通过拷贝构造函数调用的,也是调用同样的析构函数来析构
如果改为:const Complex& c2作为参数,则只有三次
------解决方案--------------------
对于自定义的用户类型,如果拷贝构造函数的成本比较高的话,最好用引用传递参数,这样能免去一个对象的构造,节省成本。