C++ Throw Exception 中的构造与析构 问题

来源:百度知道 编辑:UC知道 时间:2024/06/09 06:53:19
写了个简单函数:程序如下:
1. 如果没有拷贝构造函数,那么输出结果如下:
Enter try...
MyFunc
Expt() - 1
~Expt() - 1
Expt message...
~Expt() - 0
~Expt() - -1
END

2.如果加上拷贝构造函数,则结果比较正常,如下:
Enter try...
MyFunc
Expt() - 1
Copy Expt()...2
Expt message...
~Expt() - 2
~Expt() - 1

为什么有拷贝构造函数的时候,构造析构两次,其中一次构造,另一次拷贝构造,合理!

但是没有拷贝构造函数的时候,构造一次,析构三次,多出一次构造也析构,不能理解!!!希望路过的帮忙解答,谢谢!

#include <iostream>
using namespace std;
int i=0;
class Expt
{
public:
Expt(){
i++;
cout<<"Expt()" <<" - "<<i<<endl;
}
~Expt()
{
cout <<"~Expt()" << " - " <<i <<endl;
i--;
}

// Expt(Expt &)
// {
// i++;
// cout <<"Copy Expt()..."<<i <<endl;
// }
const char *ShowReason() const
{

..再看了下

我把代码改了下

~Expt()
{
cout<<this<<endl;
cout <<"~Expt()" << " - " <<i <<endl;
i--;
}

用系统默认 拷贝构造器的时候 创建了 3个 对象
也就是说 调用一次拷贝构造函数 时 创建了 2个对象
没见过系统默认的 拷贝构造函数
默认的 该不会传的参数是对象,而不是引用吧

构造和析构是成对出现的啊?怎么可以构造一次,析构三次呢?我也不懂。等待高手