首页 > 编程 > C++ > 正文

GeekBand C++面向对象下第二周笔记

2019-11-08 02:50:32
字体:
来源:转载
供稿:网友

GeekBand C++面向对象下第二周笔记


1.关于vptr和vtbl

这里写图片描述 虚函数表(Virtual table 或称为vtbl),虚函数指针( Virtual pointer 或者称为 vptr) 编译器会为每个有虚函数的类创建一个虚函数表,该虚函数表将被该类的所有对象共享。类的每个虚成员占据虚函数表中的一行。如果类中有N个虚函数,那么其虚函数表将有N*4字节的大小。 由p指针指向vptr,再由vptr指向vtbl中的第n个指针,调用这个指针所指向的函数,由此实现了多态。 A* p = new B(); 多态的三个条件

通过指针调用有虚指针和虚表向上转型

2.静态绑定和动态绑定

这里写图片描述

上图是静态绑定的情况 如果编译器可以在编译阶段就完成绑定,就叫作静态绑定或前期绑定。 这里写图片描述

上图是动态绑定的情况 动态绑定是指编译器在编译阶段不知道要调用哪个方法,直到运行时才能确定。


3.const关键字

这里写图片描述

使用const的好处在于它允许指定一种语意上的约束——某种对象不能被修改——编译器具体来实施这种约束。通过const,你可以通知编译器和其他程序员某个值要保持不变。只要是这种情况,你就要明确地使用const ,因为这样做就可以借助编译器的帮助确保这种约束不被破坏。上图是const的调用规则。


4.重载new和delete

这里写图片描述

为什么有必要写自己的Operator new和operator delete? 答案通常是:为了效率。缺省的operator new和operator delete具有非常好的通用性,它的这种灵活性也使得在某些特定的场合下,可以进一步改善它的性能。尤其在那些需要动态分配大量的但很小的对象的应用程序里,情况更是如此。


5.basic_string使用new(extra)扩充申请量

这里写图片描述

这便是一个重载new和delete实例



发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

图片精选