6.3w+
社区成员
1. MyException e 的生命周期是否为if{}块??
2.为什么把char *cause;替换成char cause[21];数组后就不会出现上述问题?
3.catch处理器能否接受一个传引用x??
////////////////////////////////////
1.e的生命期在try块内,抛出异常的时候会将对象拷贝给一个临时对象
2.你程序问题之一就是没有拷贝构造函数,因此调用了浅拷贝,使e得cause和临时对象的cause指向同一块内存,释放的时候就出问题了
你不new的话,就没这个问题,各自占各自的内存
3.能
class MyException
{
public:
char *cause;
MyException(char *in)
{
cause=new char[21];
strcpy(cause,in);
}
MyException(MyException &me){ //要定义一个拷贝构造函数
cause = new char[strlen(me.cause) + 1];
strcpy(cause, me.cause);
}
void printmessage()
{
cout <<"Error!" <<cause <<endl;
//delete[] cause; //去掉
}
~MyException()
{
delete[] cause;
}
};
class person
{ int age;
public:
void get()
{
cout <<"Enter age:" <<endl;
cin>> age;
MyException e("Problem with age!");
if(age> 100 ||age <0)
throw e;
else
cout <<"Correct age. : )";
}
};
void main()
{
person pe;
try
{
pe.get();
}
catch(MyException &x)
{
x.printmessage();
}
}
#include <iostream.h>
#include <string.h>
class MyException
{
public:
char *cause;
MyException(char *in)
{
cause=new char[21];
strcpy(cause,in);
}
void printmessage()
{
cout < <"Error!" < <cause < <endl;
delete[] cause;
}
~MyException()
{
delete[] cause;
}
};
class person
{ int age;
public:
void get()
{
cout < <"Enter age:" < <endl;
cin> > age;
MyException e("Problem with age!");
if(age> 100 ¦ ¦age <0)
throw e;
else
cout < <"Correct age. : )";
}
};
void main()
{
person pe;
try
{
pe.get();
}
catch(MyException &x)
{
x.printmessage();
}
}