throw obj总是会发生复制(copy constructor),复制总是以对象静态类型为本。
谨慎使用throw-by-pointer,因为pointer可能指向局部对象,在离开scope时结果不可预期。
try
{
//...
throw some_obj; // (1)
}
catch(Obj obj) // (2)
{
throw obj; // (3)
}
catch(Obj& obj) // (4)
{
throw obj; // (5)
}
catch(const Obj& obj) // (6)
{
throw; // (7)
}
some_obj被复制,离开scopeobj是一个副本obj被复制,同(1),对象类型为其静态类型obj是exception的引用- 与(3)相同
- 与(4)相同
throw将obj抛出,不发生复制(保持exception类型)
本文探讨了throw语句中的对象复制行为,重点讲解了通过指针传递的exception、复制构造函数的应用、不同类型的catch块对异常处理的影响,以及throw关键字的特殊之处。
7857

被折叠的 条评论
为什么被折叠?



