引用与函数指针:

函数指针就是把函数名挖掉变成*p

函数指针的类型就是把p去掉

函数指针的引用(引用就是在类型和名字的中间加&)

函数指针加一个()就成调用函数了-----------p()

总结:

1.相当于初始化int*(函数指针类型 - 包含返回类型和参数)

2.初始化相当于初始化函数块,相当于能做什么事

1的初始化是初始化函数本身

2的初始化才是真正意义上的传参

1(函数体初始化)

2(参数实例化)

总结一下:单单的函数指针定义没有任何实际含义(只是一个空的接口)

初始化相当于赋予函数块功能

然后的调用才是传参引用与指针

引用与指针

引用是栈上的

引用本质是指针

引用不能动态开辟内存(堆)

也是四个字节

3.函数指针数组与引用

int(*p[4])(int a, int b) {add,sub,mul,divv};

//二级指针开辟函数指针数组

int(**pp)(int a, int b) { new(int(*[4])(int, int)){ add,sub,mul,divv } };

个数一定是紧跟在变量名后!!!!

返回值是函数指针的搞法:把指针名挖掉换成函数名,加()里面加参数就完了

4.全局变量优先于main函数

Free不会调用析构函数,delete会调用析构函数

Malloc和free无法调用构造函数和析构函数

只能用new和delete。

内置类型没有就一样的效果

给我的感觉就是:构造函数和析构都只是对内容的初始化和销毁,真正对内存进行创建和销毁的是new和delete;

5.基本数据类型:数组 delete p 和delete []p是一样的

复合数据类型,单个直接delete,复合的就要delete[]p;

单个你去加[]相当于无限删除

6.new和delete的重载

void *operator new(size_t  size)

new不管是局部还是全局都会调用一次构造函数

void *operator new[](size_t  size)

数组传进去的size多四个字节记录调用构造函数的次数

真正的个数是size-4

void operator delete(void *p)

这里传的是开辟空间的首指针,

void operator delete[](void *p)

如果是类类型,由于delete调用析构函数的次数时根据new调用构造函数的次数来决定的(构造函数会传给delete一个数字四个字节)所以全给delete[]的指针要是划分的首地址,传进去的p是总开辟大小的首地址

局部的重写使用全局作为辅助

全局的重写需要使用malloc和free

空类还是占一个字节

New->::new->malloc->构造函数

New->构造函数

析构函数->delete

析构函数->delete->::delete->free

分配内存优先于构造函数

析构优先于释放内存

7.容器操作:

Pushback,pushfront,clear,assign,back,front,pop_back,pop_front,reverse,sort

Merge归并,前提是每个容器都要是有序的

8.类的空指针可以调用类的函数,代码区是共享的,数据是独立

可以调用,不能访问数据

9.new和delete

整个内存分配的过程:

New:

new一块足够大的未类型化的内存

调用构造函数初始化这片内存

返回指向该内存对象的指针

Delete:

调用析构函数

Operator delete标准库函数释放该对象的内存

现总结C++语言中不能重载的操作符有:

.            .*             ::           ?:

new          delete         sizeof       typeid

static_cast  dynamic_cast   const_cast   reinterpret_cast

可以重载的操作符有:

operator new      operator delete

operator new[]    operator delete[]

+   -   *   /   %   ^   &   |   ~

!   =   <   >   +=  -=  *=  /=  %=

^=  &=  |=  <<  >>  >>= <<= ==  !=

<=  >=  &&  ||  ++  --  ,   ->*  ->

() []

10.new(关键字)一下时包含两个子操作operator new(操作符)和构造函数

最新文章

  1. mysql中使用 where 1=1和 0=1 的作用
  2. CCF真题之ISBN号码
  3. 应该把script标签放在哪里
  4. (转)关于c#中的事件
  5. css让图片居中显示在手机屏幕上
  6. linux中的strings命令简介
  7. php中__autoload()方法详解
  8. iOS6 旋转
  9. vue 组件中数组的更新
  10. 错误卸载软件导致Windows7系统中的软件无法播放视频
  11. [Noi2016]国王饮水记
  12. 使用webstrom开发react-native时react-native代码会出现红色下划线的解决方法
  13. OpenXml SDK 2.0 创建Word文档 添加页、段落、页眉和页脚
  14. POJ3281_Dining
  15. winodws同步时间命令
  16. C++中类所占的存储空间
  17. XDocument简单入门
  18. [BZOJ2091]The Minima Game
  19. HDU - 4339: Query(bitset暴力找下一个为1的)
  20. 推箱子Unity

热门文章

  1. 《android开发艺术探索》读书笔记(三)--分发机制和滑动冲突
  2. 算法提高 矩阵乘法 区间DP
  3. alsa声卡分析alsa-utils调用过程
  4. 利用 xrandr 命令修改屏幕分辨率
  5. FFmpeg-音频和视频应用程序的瑞士军刀
  6. Android shape使用详解
  7. plx9030触发pci中断
  8. FusionCharts封装-Category
  9. SVN同步出现问题
  10. Error:dijit.tree.TreeStoreModel:root query returned 0 items