Boolan----C++对象模型(Object Model)

* 虚指针(vptr):用于指向类中的虚函数所在的虚函数列表(vtbl),不管一共有几个虚函数,其在内存中所占的内存仅为一根虚指针的大小;与之相对,普通函数在雷的对象的内存中不占据内存空间。

* 假设p为指向包含虚函数表的对象的指针,则p对虚函数的调用即可写为:


其中p为this指针

* 静态绑定:汇编语言转化之后直接指出函数地址,即call ***

* 动态绑定的限定条件:(1)通过对象指针调用该虚函数

(2)该指针具有向上转型能力,

(3)调用的对象为虚函数

* 动态绑定:所点调用的虚函数具体不能被提前确定,需要看指针所指向的对象

* this指针:该指针的一般用法:先打好框架,留下父类的虚函数的接口,其中父类的函数M调用了该虚函数;然后将框架交给他人使用,他人使用框架时写出继承的类,并且实现了该虚函数接口,再通过子类去调用父类的函数M,此时M会根据指针的来源选择执行不同的虚函数


Boolan----C++对象模型(Object Model)_第1张图片

* this指针通常结合虚函数使用

* Dynamic Binding:主要体现在汇编语言

Boolan----C++对象模型(Object Model)_第2张图片

* 再谈const:

(1)成员函数 + const:用于告诉编译器该函数

(2)const + object:不会改变该对象

(3)常量对象不能调用非常量函数,否则jj

(4)const算作签名的一部分


Boolan----C++对象模型(Object Model)_第3张图片

* new: 其实是一个表达式,而不是运算符

重载方式:static void* operator new(size_t size)

* delete:其实是一个表达式,而不是运算符

重载方式:static void* operator delete(void*, size_t size)

你可能感兴趣的:(Boolan----C++对象模型(Object Model))