More Effective C++之12

原创 2006年06月03日 18:10:00
条款12:了解[掷出一个exception]与[传递一个参数]或[调用一个虚函数]之间的差异
       这个地方我在我先前关于异常的部分论述的比较清楚,这里只是写一些以前不曾写过的细节。第一个要点是异常抛出的如果是一个指针,那么C++没有义务顾及指针指向的地址,那么指针指向的内容需要用户负责,也就是说程序员需要保证指针指向的内容有效。其他方式,无论是值传递还是引用传递都是会自动复制一个对象副本,因为需要保证对象没有出生命域,依然存在。所以传递参数和抛出异常在同样情况下速度是不同的。第二,异常的抛出在以值传递和引用传递的时候,考虑抛出对象都是以对象的静态型别,所以特别需要注意的是不要对象切片了。
考虑两段代码:
catch(A& a)
{
throw;
}
catch(A& a)
{
Throw a;
}
       这两段代码的意义是不同的。上面代表异常的Rethrow,对象是不拷贝的。而下面只是对象的抛出,这时候会发生对象拷贝,也就是说抛出的是副本。
       还有需要注意的是,对异常捕获不要去期待隐式转换。因为异常捕获只支持两种转换,一种是继承架构中的exception转换,一种是有型指针向void指针的转换。
       最后就是catch之句的顺序,通常顺序要是从小范围到大范围,从派生类到基类。
版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

More Effective C++----(12)理解"抛出一个异常"与"传递一个参数"或"调用一个虚函数"间的差异

Item M12:理解"抛出一个异常"与"传递一个参数"或"调用一个虚函数"间的差异 从语法上看,在函数里声明参数与在catch子句中声明参数几乎没有什么差别: class Widget {...

More Effective C++之Item M12:理解“抛出一个异常”与“传递一个参数”或“调用一个虚函数”间的差异

从语法上看,在函数里声明参数与在catch子句中声明参数几乎没有什么差别: class Widget { ... }; //一个类,具体是什么类 // 在这里并不重要 void f1(Widge...

More Effective C++:Item 27

温习More Effective C++,对于Item 27:要求或禁止在堆中产生对象,整理思路于此文。编译期控制通过禁用编译器产生对象所需的选项即可在编译期阻止对象被定义。产生堆对象所需的选项: ...

More Effective C++之Item M21:通过重载避免隐式类型转换

C++规则:每一个重载的operator必须带有一个用户定义类型(user-defined type)的参数; 以下是一段代码,如果没有什么不寻常的原因,实在看不出什么东西: class UP...

More Effective C++:指针与引用的区别

指针与引用看上去完全不同(指针用操作符’*’和’->’,引用使用操作符’.’),但是它们似乎有相同的功能。指针与引用都是让你间接引用其他对象。你如何决定在什么时候使用指针,在什么时候使用引用呢? ...

More Effective C++----技巧 & (25)将构造函数和非成员函数虚拟化

技巧 本书涉及的大多数内容都是编程的指导准则。这些准则虽是重要的,但是程序员不能单靠准则生活。有一个很早以前的卡通片叫做“菲利猫”(Felix the Cat), 菲利猫无论何时遇到困难,它都会拿...

More Effective C++议题【一】:指针和引用

> 学习笔记【一】 这个议题作为第一个建议出现在了 More effective ++中, 在一开始,第一件事就是提醒了我们关于指向空值的引用. 即如下代码出现的可能性: char *pc = 0; ...

More Effective C++----(10)在构造函数中防止资源泄漏

Item M10:在构造函数中防止资源泄漏 如果你正在开发一个具有多媒体功能的通讯录程序。这个通讯录除了能存储通常的文字信息如姓名、地址、电话号码外,还能存储照片和声音(可以给出他们名字的正确发音...

More Effective C++笔记

(之前Mindjet笔记的截图) 更多:(http://blog.csdn.net/u011512437/article/details/48879543 “Effective C++笔记”)

《More Effective C++》6:区别递加和递减符号的前置和后置形式

《More Effective C++》Rule 6:区别递加和递减符号的前置和后置形式
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)