C++编译原理
Preprocessing + Compilation + Assembly + Linking
-E 预编译 生成.i文件
-S 预编译+编译 生成.s文件
-c 预编译+编译+汇编 生成.o文件
-l
-g 生成调试时间
-W 使能警告
符号表
头文件的例外:
const全局变量
static变量
inline
class类内定义
https://zybuluo.com/uuprince/note/81709
多态三要素
父类中有虚函数。
子类覆盖父类中的虚函数
通过己被子类对象赋值的父类指针,调用该虚函数
作用:
隐藏实现细节
接口重用
虚函数与多态
虚函数的特性:动态绑定(只能由引用或指针触发)
多态:
1. 引用或指针的静态类型与动态类型不一致
2. 由动态类型决定真实执行的版本
override与final
override 标记此函数覆盖了基类的虚函数(避免发生隐藏),也只有虚函数可以覆盖
final 标记子类不可以覆盖此虚函数
默认实参:使用引用或指针的静态类型,而不是动态类型
绕过动态绑定:使用作用域运算符
不能设为虚函数的有:
1. 构造函数(参见多态)
2. inline成员函数(不存在函数调用)
3. static成员函数(没必要)
4. 友元函数(没有继承的概念)
虚函数表
每个父类(有虚函数)维持一个表
https://blog.csdn.net/haoel/article/details/1948051
菱形继承:虚继承解决,共同父类导致的二义性问题
三/五法则
如果一个类需要析构函数,那么也需要拷贝构造函数和拷贝赋值构造函数。
如: 析构函数中需要释放一个构造函数中分配的动态内存,默认的拷贝会使得所有对象都指向同一个动态内存。
内存泄露
definitely lost:
1. 多态中,父类的析构函数不是虚函数
2. 智能指针,循环引用(weak解锁)
3. 内存覆盖,strncpy
indirectly lost:
1. longjmp
possibly lost:
1. 由于抛出异常导致没有释放内存
(char *) 0 、(char *) 9 :
(char *) 0:C语言中,produce a null-pointer value of type char *;其他语言可能执行其他地址
(char *) 9:大多数语言中执行地址9
宏定义的作用域:
C语言标准中宏定义的作用域是--从定义位置开始,到其当前所在作用域结束,即宏定义只属于当前这个文件,其他文件如果没有通过#include包含这个文件,那就不能使用这个宏定义。
内存屏障:
保证屏障前后的执行顺序
http://www.cnblogs.com/Mainz/p/3556430.html
volatile:
volatile 作用:
1. 不允许被优化消失,必须按部就班地与「内存」进行交互
2. 于序列上在另一个对 volatile 对象的访问之前
volatile 只在三种场合下是合适的:
1. 和信号处理(signal handler)相关的场合
2. 和内存映射硬件(memory mapped hardware)相关的场合
3. 和非本地跳转(setjmp 和 longjmp)相关的场合
https://liam0205.me/2018/01/18/volatile-in-C-and-Cpp/
SegmentFault:
enable: ulimit -c unlimited
save path: /cores/
hash与map
map有两种实现方式:hash和二叉树
stl的map是红黑树;unordered_map是hash
智能指针
默认初始化为空指针
可以制定删除器
unique_ptr不能拷贝或赋值,但将要被销毁的指针除外
unique_ptr可以通过release或reset转移指针所有权
删除器导致shared_ptr和unique_ptr的区别:
shared_ptr的删除器指针是运行时绑定;
unique_ptr的删除器指针是编译时绑定;
shared_ptr与control block
1. 对象指针
2. 引用计数
3. 删除器
支持原子访问
weak_ptr也会保持control block不被释放
https://heleifz.github.io/14696398760857.html
仿函数
不是函数,但可以像函数一样调用对象(重载了operator())
引用与指针
语言层面上,引用不是指针,只是变量的别名
从底层实现上,引用是指针实现的
refs:
Makefile https://seisman.github.io/how-to-write-makefile/introduction.html
C++知识点
猜你喜欢
转载自www.cnblogs.com/shaellancelot/p/9021906.html
今日推荐
周排行