异常类已经传参问题

#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();
}


}





这是运行到最后,还没有退出的时候的结果,推出的时候还应该有其他的显示,即销毁另一个对象,


这里有两个

Exception Class Destruct String
Exception Class Destruct String

为什么会调用两次析构函数


主要是因为最后的catch上


接收的是一个对象


因为当对象传递给上面 函数时,将调用复制构造函数创建一个新的对象,而这个对象名是 xxxxxxx,这个对象只在函数体内有效,函数结束时,则自动销毁,因此会调用析构函数。

传递来的形参最后也需要析构

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值