代码改变世界

随笔档案-2013年07月

C++异常机制的实现方式和开销分析

2013-07-29 14:09 by Dirichlet, 288 阅读, 收藏, 编辑
摘要: 转自:http://baiy.cn/doc/cpp/inside_exception.htm(转载)C++异常机制的实现方式和开销分析白杨http://baiy.cn 在我几年前开始写《C++编码规范与指导》一文时,就已经规划着要加入这样一篇讨论 C++ 异常机制的文章了。没想到时隔几年以后才有机会把这个尾巴补完 :-)。还是那句开场白:“在恰当的场合使用恰当的特性” 对每个称职的 C++ 程序员来说都是一个基本标准。想要做到这点,就必须要了解语言中每个特性的实现方式及其时空开销。异常处理由于涉及大量底层内容,向来是 C++ 各种高级机制中较难理解和透彻掌握的部分。本文将在尽量少引入底层细节的 阅读全文

虚继承

2013-07-29 13:05 by Dirichlet, 787 阅读, 收藏, 编辑
摘要: 图例,典型菱形虚继承。 内存布局: 虚子类Left, Right在最上,虚基类在最下面,本质是两个虚子类对象的开始部分都含有一个虚指针指向虚表,虚表里有相对于Top的偏移量。 当做Right,Left指针到Top指针的转换时,需要用到这个偏移量。 Right* right; Left* left; 阅读全文

dynamic_cast, RTTI, 整理

2013-07-29 11:43 by Dirichlet, 2208 阅读, 收藏, 编辑
摘要: 主要是参考下图,了解内存布局,然后写个实例程序就差不多明白了,但是需要熟悉指针转换。1) 只有多态类才有RTTI信息,dynamic_cast正是运用RTTI进行转换,属于运行时类型检查。2) dynamic_cast判断两个指针是否能转换时,用RTTI可以知道当前实际对象,然后遍历自己所有的父类,看是否有与目标类型一致的,如果有就可以进行转换。3) dynamic_cast是安全的,可以通过检查返回值或异常捕捉来判断是否转成功。其中检查返回值用于指针转换,异常捕捉用于引用转换。4) 补充一点,与static_cast不同,即使两个类没有直接继承关系,但是只要在一个类层次结构中,就有可能指向同 阅读全文

staitic_cast原理与使用

2013-07-29 10:55 by Dirichlet, 1903 阅读, 收藏, 编辑
摘要: 本文以下述结构为例: 总结如下: 1) static_cast用于有直接或间接关系的指针或引用之间 转换。没有继承关系的指针不能用此转换,即使二者位于同一类体系中。比如,Left,Right之间不能用static_cast,编译器无法确定二指针如何移动偏移量,请考虑Left,Right还有可能位于其 阅读全文
点击右上角即可分享
微信分享提示