日期:2011-03-22 13:55:00 来源:本站整理
More Effective C++:通过引用捕捉非常[VC/C++编程]
本文“More Effective C++:通过引用捕捉非常[VC/C++编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
当你写一个catch子句时,必须肯定让非常通过何种方法传送到catch子句里.你可以有三个挑选:与你给函数传送参数一样,通过指针(by pointer),通过传值(by value)或通过引用(by reference).
我们首先谈论通过指针方法捕捉非常(catch by pointer).从throw处传送一个非常到catch子句是一个迟钝的历程,在理论上这种办法的实现关于这个历程来说是效率最高的.因为在传送非常信息时,只有采取通过指针抛出非常的办法才可以做到不拷贝对象,比方:
class exception { ... }; // 来自尺度C++库(STL)
// 中的非常类层次
void someFunction()
{
static exception ex; // 非常对象
...
throw &ex; // 抛出一个指针,指向ex
...
}
void doSomething()
{
try {
someFunction(); // 抛出一个 exception*
}
catch (exception *ex) { // 捕捉 exception*;
... // 没有对象被拷贝
}
}
这看上去很不错,但是实际情形却不是这样.为了能让程序正常运行,程序员定义非常对象时必须确保当程序掌握权脱离抛出指针的函数后,对象还可以持续生存.全局与静态对象都可以做到这一点,但是程序员很简单忘掉这个约束.假如真是如此的话,他们会这样写代码:
void someFunction()
{
exception ex; // 部分非常对象;
// 当退出函数的生存空间时
// 这个对象将被释放.
...
throw &ex; // 抛出一个指针,指向
... // 已被释放的对象
}
这简直糟糕透了,因为处理这个非常的catch子句承遭到的指针,其指向的对象已经不再存在.
以上是“More Effective C++:通过引用捕捉非常[VC/C++编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |
评论内容只代表网友观点,与本站立场无关!
评论摘要(共 0 条,得分 0 分,平均 0 分)
查看完整评论