码迷,mamicode.com
首页 > 编程语言 > 详细

深度探索C++对象模型——对象

时间:2017-04-06 12:28:32      阅读:219      评论:0      收藏:0      [点我收藏+]

标签:内联函数   ati   添加   ase   配置   对象模型   派生   运算符   产生   

虽然成员数据包含在类的声明里面,但不出现在对象中,但是并没有增加类的成本每一个非内联函数都只会诞生一个函数实体。

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

  1. 虚函数机制,用以支持有效率的“执行器绑定”
  2. 虚基类,用以实现“多次出现在继承体系中的虚基类,有一个单一而被共享的实体”。

此外还有一席多重继承下的额外负担,发生在“一个派生类和其第二或后继之 base class 的转换”之间。

 

在C++中,有两种类数据成员 static 和 nonstatic,以及三种类成员函数:static、nonstatic和virtual。

 

C++对象模型。在该模型中,【非静态数据成员】 被配置于每一个 【类成员】 之内, 【静态数据成员】、【静态】和【非静态的成员函数】 则被放在所有的 【类对象】之外。(1内3外)。

关于虚表:

  1. 每一个类产生出一堆指向虚函数的指针,放在表格中。这个表被称为虚表(virtual table \ vtbl)。
  2. 每一个类成员被添加了一个指针,指向相关的virtual table。这个指针通常被称为 virtual pointer/ vptr。 vptr 的设定和重置都是由每一个类的【构造函数】和【拷贝赋值运算符】自动完成的。每个类关联的type_info object(用以支持runtime type identification,RTTI)也经由vtbl被指出,通常放在表格第一个slot。

深度探索C++对象模型——对象

标签:内联函数   ati   添加   ase   配置   对象模型   派生   运算符   产生   

原文地址:http://www.cnblogs.com/liuyubin233/p/6672809.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!