c++对象模型
文章平均质量分 89
c++对象模型
ruan875417
这个作者很懒,什么都没留下…
展开
-
【深度探索C++对象模型读书笔记】【第7章】站在对象模型的尖端
一、Template 1、classexpression templates将在编译时期而非执行时期被评估,因而带来重大的效率提升。 2、当编译器看到template class声明时,在实际程序中,什么反应也没有。templateclass中的任何member,只能通过templateclass的某个实例来操作。 template class Point{ public: enum S原创 2015-06-16 16:13:47 · 488 阅读 · 0 评论 -
【深度探索C++对象模型读书笔记】【第6章】执行期语意学
一、对象的构造和析构 1、如果一个区段或函数中有一个以上的离开点,destructor必须被放在每一个离开点之前。 2、一般而言object应尽可能放在使用它的那个程序区附近,这样做可以节省不必要的对象产生和销毁操作。 3、C++程序中所有的global objects都被放置在程序的data segment中。如果global object有constructor和destructor的话原创 2015-06-14 17:06:18 · 498 阅读 · 0 评论 -
【深度探索C++对象模型读书笔记】【第5章】构造、析构、拷贝语意学
1、 一般而言,class的data member应该被初始化,而且只在constructor中或其它member functions中初始化,其它任何操作都将破坏其封装性质,使其维护和修改更加困难。 2、 可以定义并调用一个pure virtualfunction,但它只能被静态调用,不能经由虚拟机制调用。 3、 class设计者一定得定义pure virtual destructor,因为原创 2015-06-12 13:01:09 · 726 阅读 · 0 评论 -
【深度探索C++对象模型读书笔记】【第2章】构造函数语意学
一、Default Construct的构造操作 1、 C++ Standard说:对于一个类,如果没有用户定义的构造函数,那么会有一个默认构造函数被隐式声明出来,但这个构造函数是trivial constructor(没啥用的)。 2、 以下4种情况编译器会合成nontrivial default construct: a) 带有default constructor的member cl原创 2015-06-10 10:01:57 · 660 阅读 · 0 评论 -
c++对象内存布局
在c++中,有两种数据成员:static和nonstatic,三种成员函数:static、nonstatic和virtual。c++对象模型:nonstatic data members被置于类对象之内,而staticdata members被置于类对象之外。static和nonstaticfunction members被放在类对象之外。virtual函数则由如下步骤支持: 1)每个cla原创 2015-06-08 09:46:02 · 1165 阅读 · 0 评论 -
c++虚函数表
C++中的虚函数(Virtual Function)的实现通过一张虚函数表来实现的,简称为V-Table。在这个表中,主要是一个类的虚函数的地址表,这张表解决了继承、覆盖的问题,保证其真实反应实际的函数。这样,在有虚函数的类的实例中分配了指向这个表的指针的内存,所以,当用父类的指针来操作一个子类的时候,这张虚函数表就显得尤为重要了,它就像一个地图一样,指明了实际所应该调用的函数。 编译器应该是保原创 2015-06-07 09:57:59 · 497 阅读 · 0 评论 -
【深度探索C++对象模型读书笔记】【第4章】Function语意学
1、 C++支持三种类型的member functions,static、nonstatic和virtual,每一种类型被调用的方式都不相同。 2、C++的设计准则之一便是nonstatic member function至少必须和一般的nonmember function有相同的效率。编译器内部会将member函数实例转换为对等的nonmember函数实例,转换步骤为: a) 改写函数原创 2015-06-06 13:39:23 · 497 阅读 · 0 评论 -
【深度探索C++对象模型读书笔记】【第3章】Data语意学
1、例子,用VS 2013编译器 #include using namespace std; class X{}; class Y :public virtual X{}; class Z :public virtual X{}; class A :public Y, public Z{}; int main(){ cout << sizeof(X) << endl;// 1 cout原创 2015-06-04 09:35:03 · 682 阅读 · 0 评论 -
【深度探索C++对象模型读书笔记】【第1章】关于对象
1、 C++在布局和存取时间上的主要的额外负担是由virtual引起的,包括: 1)virtualfunction机制,用以支持一个有效率的“执行期绑定” 2)virtualbase class,用以实现“多次出现在继承体系中的baseclass,有一个单一而被共享的实例”; 3)多重继承下的额外负担,发生在“一个派生类和其第二个或后继之基类的转换”之间。 2、 在c++中,有两种数原创 2015-06-02 10:32:52 · 535 阅读 · 0 评论