1 之所以析构函数会比构造函数多两次,是因为其中两次对象的构造不是通过构造函数完成的,而是通过默认拷贝构造函数来完成的,所以没有调用到构造函数。
如果你想仔细看看可以在你的类当中添加这么一个方法
complex(const complex& com)//拷贝构造函数,用来用一个对象初始化另一个对象。
{
cout<<"COPY"<
imag = com.imag;
}
和默认构造函数一样,如果没有拷贝构造函数,系统也会自动生成一个默认拷贝构造函数的。
然后就会发现拷贝构造函数和构造函数调用的次数和和析构函数调用次数是相等的。
其中两次拷贝构造函数的调用一次是在后置++函数体的第三行。还有一次是前置++返回的对象。因为这个对象在局部地址中,因此要拷贝一份来返回。
2这边为什么在real和imag的数值输出之前会先输出“后置++”与“前置++”,它究竟是怎样调用的啊?
这个是在
cxres=cx4++;
行中调用的。所以在cxres.disp();之前显示出来了。