关闭

深度探索C++对象模型(1)

标签: C++对象
184人阅读 评论(0) 收藏 举报
分类:

没错。。。就是这么爱读书的一只我(我会说是我买多了然后不看觉得可惜吗。。。),但是这本书倒确实是老师一直推荐让看。。。

template <class type,int dim>//重载输出流,我用的不是很熟练刚好看到,温习一下

{

  os<<"(";

  for(int ix = 0;ix <dim-1;++ix)

  {

      os<<pt[ix]<<",";

   }

   os<<pt[dim-1];

   os<<")";

}


关于C++加上封装后的布局成本:

关于非静态数据成员直接内含在每一个class object之中

而对于成员函数,虽然含在class的声明之内,却不出现在object(对象)之中,每一个non-inline成员函数只会诞生一个函数实例

每一个"拥有一个或者一个定义"的inline function则会在其每一个使用者(模块)身上产生一个函数实例。

C++在布局以及存取时间上的主要的额外负担是由virtual引起的,包括

virtual function机制: 用以支持一个有效率的"执行期绑定"

virtual base class:    用以实现"多次出现在继承体系中的base class,有一个单一而被共享的实例"。


1.1C++对象模式

两种类数据成员:

static:存放在个别的类对象之外

nonstatic:存放在每一个类对象之内

三种类成员函数:

static:个别的类对象之外

nonstatic:个别类对象之外

virtual:

(1)每一个class产生出一堆只想虚函数的指针放在表格中,表格缩写vtbl

(2)每一个类对象被安插一个指针,指向相关的虚表,指针缩写vptr,指针的设定和重置都有每一个类的构造拷贝或者析构自动完成,每一个class关联的type_info(具体实现方式依照编译器而定) object也经由virtual table被指出来,通常放在表格第一个地址。


在简单对象模型中,每一个base class可以被derived class object内的一个slot指出,该slot内含类的基类的子对象的地址,缺点是因为间接性会导致空间和存取时间上的额外负担,优点是class object的大小不会因为base classes的改变而受到影响。


C++凡是处于同一个access section的数据,必定保证以其声顺序出现在内存布局当中。

P22




0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:41442次
    • 积分:2245
    • 等级:
    • 排名:第17469名
    • 原创:190篇
    • 转载:3篇
    • 译文:0篇
    • 评论:8条
    最新评论