2015年7月16日

摘要: 对于C++中类的大小,主要针对于无成员的空类大小,编译器会对该类进行优化,情况主要分为是否有虚表(虚函数)两种类型,对于无虚函数的类,该类大小均为1个字节(编译器插入一个char表示该类的存在),而出现虚函数的类,该类大小为虚表指针大小4个字节(32位系统)。如出现继承,情况又不一样,不同编译器有不... 阅读全文
posted @ 2015-07-16 13:12 kkford 阅读(219) 评论(0) 推荐(0) 编辑

2015年7月9日

摘要: 在C++构造函数中,我们一般倾向于将类成员放在初始化列表中进行,但需要注意的是初始化的顺序必须与成员声明顺序保持一致,否则在成员相互依赖时会发送不可预知的错误;另外在函数体中通过上两篇文章我们知道构造函数会完成虚表的构造,另成员在初始化列表中只需调用复制构造函数而在函数体中可能会生成临时对象(根据初... 阅读全文
posted @ 2015-07-09 13:27 kkford 阅读(239) 评论(0) 推荐(0) 编辑

2015年7月7日

摘要: 函数调用时,形参对象和返回对象均采用引用方式进行(临时对象作为中介),当一个对象作为参数(非引用)被函数调用时,该对象会通过复制构造函数获得一个临时对象,该临时对象以引用方式传递给函数,简言之,函数会被做以下处理:void foo(A x);A afoo( a);处理后:void foo(A& x)... 阅读全文
posted @ 2015-07-07 17:40 kkford 阅读(568) 评论(0) 推荐(0) 编辑

2015年7月6日

摘要: 与C++中的构造函数相同,复制构造函数在对象生成过程中同样进行插入对应的Vtable虚表,但在成员变量赋值时,除具有复制构造函数的成员对象外,编译器合成复制构造函数其余均采用”Bitwise copy semantics(位逐次拷贝)”语义实现对象成员的拷贝,无论处于何种语境。测试代码如下:#inc... 阅读全文
posted @ 2015-07-06 11:43 kkford 阅读(276) 评论(0) 推荐(0) 编辑

2015年6月25日

摘要: C++中的RAII机制指明”对象创建时通过构造函数进行初始化,析构时通过析构函数释放资源”,但实际中因类无构造函数时编译器将自动合成一个默认构造函数,该构造函数只服务于自身编译器构造需要而不负责对象成员构造,如这个实例中对象A成员val,next均未进行初始化,而对象B由于是类对象则调用其默认构造函... 阅读全文
posted @ 2015-06-25 11:07 kkford 阅读(265) 评论(0) 推荐(0) 编辑

2015年6月24日

摘要: C++中的涉及到虚表时,类对象的布局分为:虚表与数据成员,子类包含派生类布局,假设下面一个程序: 1 #include 2 3 using namespace std; 4 5 class B { 6 private: 7 int a; 8 public: 9 B() {10 ... 阅读全文
posted @ 2015-06-24 11:44 kkford 阅读(209) 评论(0) 推荐(0) 编辑

2015年6月8日

摘要: STL模板库中有大量迭代器实现,这些迭代器隔离了算法实现与访问接口,我们也可以编写属于自己的迭代器。STL中的迭代器均继承至一个通用迭代器接口:template struct iterator { typedef _Category iterator_category; //迭代器类型 typ... 阅读全文
posted @ 2015-06-08 09:54 kkford 阅读(1369) 评论(0) 推荐(0) 编辑

2015年6月2日

摘要: 在C++模板类map中一个参数为Compare类型,该类型为一个比较函数,其完整定义如下:template, class Allocator = std::allocator >> class map;函数作为类进行传递,该类采用了重载操作符()来实现函数指针到类的转变。在实际中也可以仿照此风... 阅读全文
posted @ 2015-06-02 09:17 kkford 阅读(511) 评论(0) 推荐(0) 编辑

导航