catch和函数的区别:
-
catch的参数只能是值传递或引用传递
-
catch的隐式类型转换只有两种:子类-基类;具象指针-void*泛指针。没有int-double的转换。
-
catch匹配是按照出现先后顺序,即如果基类的catch比子类先出现,则抛出的子类异常有可能被基类catch捕获;而函数往往不看先后顺序而是寻找最合适的参数匹配。
-
throw对象时,会调用拷贝构造函数生成临时对象【第一次拷贝】。catch值传递时,会在调用拷贝构造函数用此临时对象再生成一个对象【第二次拷贝】;引用传递时不会调用。
注意:在throw前如果用new开辟了堆空间,则异常抛出后这些空间不能自动回收。可以使用auto_ptr生成栈上的智能指针,系统自动回收销毁栈上的对象,进而调用其析构函数销毁智能指针类内部的堆空间。