#include <iostream>
using namespace std;
class ExceptionClass
{
public:
ExceptionClass(const char* name="Exception Default Class")
{
cout<<"Exception Class Construct String"<<endl;
cout<<name<<endl;
}
~ExceptionClass()
{
cout<<"Exception Class Destruct String"<<endl;
printf("%");
}
void ReportError()
{
cout<<"Exception Class:: This is Report Error Message"<<endl;
}
ExceptionClass(const ExceptionClass& a)
{
cout<<"拷贝构造函数"<<endl;;
}
};
class ArguClass
{
char* name;
public:
ArguClass(char* name="default name")
{
cout<<"Construct String::"<<name<<endl;
this->name=name;
}
~ArguClass()
{
cout<<"Destruct String::"<<name<<endl;
}
void mythrow()
{
throw ExceptionClass("my throw");
}
ArguClass(const ArguClass& C)
{
cout<<"拷贝构造函数"<<endl;;
}
};
int main()
{
ArguClass e("haha");
try
{
e.mythrow();
}
catch(ExceptionClass pTest)
{
pTest.ReportError();
}
using namespace std;
class ExceptionClass
{
public:
ExceptionClass(const char* name="Exception Default Class")
{
cout<<"Exception Class Construct String"<<endl;
cout<<name<<endl;
}
~ExceptionClass()
{
cout<<"Exception Class Destruct String"<<endl;
printf("%");
}
void ReportError()
{
cout<<"Exception Class:: This is Report Error Message"<<endl;
}
ExceptionClass(const ExceptionClass& a)
{
cout<<"拷贝构造函数"<<endl;;
}
};
class ArguClass
{
char* name;
public:
ArguClass(char* name="default name")
{
cout<<"Construct String::"<<name<<endl;
this->name=name;
}
~ArguClass()
{
cout<<"Destruct String::"<<name<<endl;
}
void mythrow()
{
throw ExceptionClass("my throw");
}
ArguClass(const ArguClass& C)
{
cout<<"拷贝构造函数"<<endl;;
}
};
int main()
{
ArguClass e("haha");
try
{
e.mythrow();
}
catch(ExceptionClass pTest)
{
pTest.ReportError();
}
}
这是运行到最后,还没有退出的时候的结果,推出的时候还应该有其他的显示,即销毁另一个对象,
这里有两个
Exception Class Destruct String
Exception Class Destruct String
为什么会调用两次析构函数
主要是因为最后的catch上
接收的是一个对象
因为当对象传递给上面 函数时,将调用复制构造函数创建一个新的对象,而这个对象名是 xxxxxxx,这个对象只在函数体内有效,函数结束时,则自动销毁,因此会调用析构函数。
传递来的形参最后也需要析构