对象模型(Object Model):vptr 和 vtbl
vptr和vtbl父类函数中定义的虚函数在子类中定义会覆盖掉父类中的函数,同时子类中会有一个虚指针指向虚表,
虚表内包含覆盖的虚函数和没有重定义的父类函数
C语言的写法(*(p->vptr)[n])(p));可以实现对相应路径实现对虚表中偏移量为n的函数的调用
父类是一种子类可以这么说,反过来说会出错
对象模型(Object Model):对象指针this
隐藏的指向当前对象的指针
对象模型(Object Model):Dynamic Binding
非动态绑定指向固定的对象,无法改变
动态绑定则是由指向的对象决定的
三个条件:
指针类型、虚函数、向上转型
关于 const
常成员对象只能调用常成员函数
而非常成员对象则可以调用常成员函数或非常成员函数
我的理解是常成员函数骨子里是不可改变对象中数据,不管怎么调用都不影响
而非常成员函数如果被常成员对象调用就会矛盾,好像提前说好了的生来可以改变数据的值,现在突然说不可以改变了,会冲突
new,delete重载
关于构造、析构顺序,构造是从内而外,像造车;析构是从外到内,像剥皮。
而new 和delete 的重载我觉得意义是更好的理解new 和delete的顺序和底层原理,new和delete更加灵活。
创建对象时有虚函数会多一个虚指针的大小。
basic_string使用new(extra)扩充申请量
Rep用来计数,表示被共享的对象的个数
网友评论