Boolan----C++对象模型(Object Model)
2017-05-18 本文已影响0人
091d4be0476b
* 虚指针(vptr):用于指向类中的虚函数所在的虚函数列表(vtbl),不管一共有几个虚函数,其在内存中所占的内存仅为一根虚指针的大小;与之相对,普通函数在雷的对象的内存中不占据内存空间。
* 假设p为指向包含虚函数表的对象的指针,则p对虚函数的调用即可写为:

其中p为this指针
* 静态绑定:汇编语言转化之后直接指出函数地址,即call ***
* 动态绑定的限定条件:(1)通过对象指针调用该虚函数
(2)该指针具有向上转型能力,
(3)调用的对象为虚函数
* 动态绑定:所点调用的虚函数具体不能被提前确定,需要看指针所指向的对象
* this指针:该指针的一般用法:先打好框架,留下父类的虚函数的接口,其中父类的函数M调用了该虚函数;然后将框架交给他人使用,他人使用框架时写出继承的类,并且实现了该虚函数接口,再通过子类去调用父类的函数M,此时M会根据指针的来源选择执行不同的虚函数

* this指针通常结合虚函数使用
* Dynamic Binding:主要体现在汇编语言

* 再谈const:
(1)成员函数 + const:用于告诉编译器该函数
(2)const + object:不会改变该对象
(3)常量对象不能调用非常量函数,否则jj
(4)const算作签名的一部分

* new: 其实是一个表达式,而不是运算符
重载方式:static void* operator new(size_t size)
* delete:其实是一个表达式,而不是运算符
重载方式:static void* operator delete(void*, size_t size)