美文网首页
GeekBand极客班C++面向对象高级编程(下)第二周笔记

GeekBand极客班C++面向对象高级编程(下)第二周笔记

作者: xiaoxii | 来源:发表于2017-02-16 15:16 被阅读0次

    1.对象模型:关于vptr和vtbl

    . 虚指针和虚表

    . 类中对象如何占用内存,和成员数据有关系,若B继承了A,则B中包含A所有成员再加上自己

    . 子类对象包含所有父类成分

    . 存在继承关系,一定会有虚指针

    . 函数的继承,是继承的调用权而不是内存大小

    . 每一个虚函数在虚指针所指向虚表中各有一个自己的指针所指向

    . 通过指针调用虚函数时候,不做静态绑定.

    . 虚函数的这种用法,叫做多态

    2.对象模型:关于this

    . 分析继承体系时,一定要很清楚this

    . 通过对象调用函数时,对象的指针就是this

    . 使用虚函数时候,有两种形式用法,多态和模版方法

    . 在MFC库中有很多这种栗子

    . 通常父类会写好各种功能,子类的对象调用父类的函数

    . 面向对象在使用虚函数的过程

    3.对象模型:关于dynamic binding

    . 通过编译码来观察静态绑定

    . 汇编码动态绑定的观察

    4.const

    . 常量成员函数,const放在函数小括号和花括号中间

    . 成员函数不改变class data类数据

    . 在对象调用常量或者非常量函数时,对象有可能是const也可能不是const

    . c++中很多规则都是基于其内部原理

    . const属于signature的一部分

    . 设计数据共享情况的时候一定要考虑各方改动数据的影响,改动前需先copy on write

    . 如果调用中括号的是常量字符串,则不需要做copy on write,因为常量字符串不会被修改

    5.new delete

    . new和delete在使用时都为表达式,这个行为不能改变,但其所调用函数可以重载

    . new在底层调用malloc

    6.重载operator new operator delete

    . 在全局范围重载,重载后的operator接管new和delete操作

    . 重载在这里影响非常广

    . 也可以在class中对一个成员进行重载

    . 接口和前一致

    . optional部分是可选的

    . 重载后,接管内存分配释放

    . 重载成员函数中带[]的new和delete

    . 进行对一个数组的new和delete操作的接管

    7.重载示例、接口

    . 使用者在使用时候有可能会绕过成员中重载的new来调用全局的new

    . 观察执行的结果

    . 当类中有虚函数时,类中会多出一个虚指针

    . 数组在创建时,每个数据都要调用构造函数一次

    . array前会多一个counter

    . 观察使用在绕过成员重载使用全局new的情况

    8.重载new()、delete()

    . new可以有多个版本,每个版本placement含有其独特的参数列

    . 用小括号表现出来的额外参数来区分版本

    . 第一个参数必须是size_t

    . 也可以重载其相对应的版本

    . 将new()接管

    . 观察报错信息也是一个很好的学习过程

    . 重载参数相对应

    . 被调用的时机是在分配内存后调用构造函数发出异常时,有机会释放之前分配异常的内存

    . 在异常发出后,如果没有被处理,则会terminate

    . 不同编译器对其处理方法不一样

    9.标准库中的一个栗子

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

    . reference counting的设计

    ...

    相关文章

      网友评论

          本文标题:GeekBand极客班C++面向对象高级编程(下)第二周笔记

          本文链接:https://www.haomeiwen.com/subject/bmhhwttx.html