每天学习亿点点Day 8.8: C++面向对象开发的一些有趣的点 hj老师yyds

1. 偏特化,全特化,模板模板参数

 

 

偏特化: 即一部分固定这种一部分固定有两种意思,

一个是个数的偏

即某些个参数被绑定

 

 

另一个是范围的偏:

 

 

 

 

 

模板模板参数:

 这种模板模板参数其实就是套娃,原始定义中,传进来的类必须是一个确定的类,但是这里可以在此此基础上待定一个参数,但是这个类型每次使用必须要加类进行特化

 2. 可变数量参数模板

在typename里面声明的时候用

typename... types来声明

这个时候types就是一个pack

声明完了用这个类型的时候就是

types... args这样来使用

sizeof...(args)这里的sizeof多了三个点

 

 

 3. 关于const*牛鬼蛇神套娃如何解读

随便举个例子: const int * const * const * pppi;

* pppi

* const

* const

const int

这样就区分开来,pppi就是一个指向const指针A,A指向const指针B,B指向const int.

4. reference 就是用指针实现的,它其实就是指针啦,大小相同,地址也相同,全都是假象.

引用往往都是用于参数类型和返回类型的描述

而且引用和非引用的类型其实是一样的,它们两个的signature其实是一样的,所以两者不能共同存在!

5. 关于this

其实每次成员函数调用的时候都会传入本object的this指针, 所以如果调用了一个虚函数则会调用当前this指针的虚函数. MFC里面的结构就和这个类似

 

 6. vptr和vtable

 继承下来就会覆盖基类的相同名字的虚函数,这里其实是虚函数表中的名字在起冲突的时候的处理方式,本身该继承的所有函数都依旧在,无非就是需要class::function的方式来调用

 

7. const 

 

 COW其实就是一个偷懒的机制,当我们不需要去往一位上写一个数据时候,几个指针可能同时共享一段内存,但如果某一个指针需要往里面写东西的时候,需要为这个指针独立复制一份数据并和其它指针断联, 这样其实就是写的时候复制,需要用的时候再复制,就懒.

8. replacement new的重载

 

 其实就是new后面跟一个小括号然后就可以做一些操作。new (...)里面的·东西就是所谓的placement arguments

对应的placement delete也可以重载但不会被delete 调用,只有当new调用的ctor抛出异常的时候才会调用这些重载版本的operator delete()。它只能被这样调用,因为这是为了归还未能完全创建成功的object所占用的memory.

 

posted @ 2021-08-08 11:26  Tonarinototoro  阅读(47)  评论(0编辑  收藏  举报