在C++中,抛出的异常如果是一个对象,系统会将这个对象复制一份向外抛出。
try
{
exception e;
throw e;
}
catch(exception& e){}
注意,抛出的e和catch到的e并不是同一个e,而是系统自动复制的一份对象。
对指针来说,情况有所不同。
try
{
exception* e = new exception();
throw e;
}
catch(exception* e){delete e;}
两个指针指向的对象是同一个对象。如果将这个对象转换成一个栈对象就会出现问题,如果超出生命范围,对象就会被析构。