我想知道如何创建异常对象?以及为什么处理函数参数可以是非const引用?异常对象生存期
例如:
class E{
public:
const char * error;
E(const char* arg):error(arg){
cout << "Constructor of E(): ";}
E(const E& m){
cout << "Copy constructor E(E& m): " ;
error=m.error;
}
};
int main(){
try{
throw E("Out of memory");
}
catch(E& e){cout << e.error;}
}
输出: E()的构造:内存
所以我有throw E("out of memory")
和E("out of memory")
只是暂时对象并没有对象有除E("out of memory")
之外因为没有复制构造函数被调用而被创建。所以即使这E("out of memory")
只是一个临时对象,我有一个处理程序采取非常量引用。
你能向我解释为什么这可能吗?
'因为没有拷贝构造函数被调用。所以即使这个E(“内存不足”)只是一个临时对象,我也有一个处理程序需要一个非const引用, - http://en.wikipedia.org/wiki/Copy_elision –
@skwllsp:so这是由于optimization.does这意味着临时对象没有被创建,它的参数直接传递给异常对象? – AlexDan