Geekband C++面向对象高级编程(上) 第二周笔记 暗影行者

C++面向对象高级编程

第二周结构框图:

7.三大函数:拷贝构造,拷贝赋值和析构函数
8.堆,栈与内存管理
9.复习String的实现过程
10.扩展补充:类模板,函数模板及其他

7.三大函数:拷贝构造,拷贝赋值和析构函数:

String class:

默认编译器会给出一套拷贝构造和拷贝赋值定义(这份特别标准),但带指针的class编译器给的不够用,需自己定义,所以,只要class中带指针,不能用编译器默认给的,依下图讲解拷贝构造和拷贝赋值:

Geekband C++面向对象高级编程(上) 第二周笔记 暗影行者_第1张图片

下面讲解Big Three:

(笔记注释都下在图里面了)

Geekband C++面向对象高级编程(上) 第二周笔记 暗影行者_第2张图片

构造函数与析构函数:

Geekband C++面向对象高级编程(上) 第二周笔记 暗影行者_第3张图片

程序结束之前必须释放动态分配到的堆内存(写到析构函数中)

堆栈内存讲解点我
Geekband C++面向对象高级编程(上) 第二周笔记 暗影行者_第4张图片

拷贝构造函数:

拷贝赋值函数:

(笔记在图上)
Geekband C++面向对象高级编程(上) 第二周笔记 暗影行者_第5张图片

注意要写检测自我赋值语句,如果不写可能会导致下图:

如果没写检测自我赋值语句,可能会出错!
侯捷老师总结:写检测自我赋值语句不止为了效率高,而且是为了防止出错!

8.堆,栈与内存管理:

output函数:

Geekband C++面向对象高级编程(上) 第二周笔记 暗影行者_第6张图片

cout这种东西本来就可以接收字符串的地址以打印出字符串

所谓堆栈:

Geekband C++面向对象高级编程(上) 第二周笔记 暗影行者_第7张图片

堆对象的生命期

Geekband C++面向对象高级编程(上) 第二周笔记 暗影行者_第8张图片

 注意:new先分配memory,再调用ctor
      delete:先调用dtor,在释放memory

动态分配所得的内存块,in VC:

Geekband C++面向对象高级编程(上) 第二周笔记 暗影行者_第9张图片

   调试模式下,多出来的内存是一种必要的浪费,因为以后回收时需要靠某些东西顺利回收。
   上下cookie最重要的作用是记录整块给你的大小(以便回收时让编译器知道要回收的大小)

array new一定要搭配array delete

要使用array delete否则会出现内存泄漏

10.扩展补充:类模板,函数模板及其他

进一步补充:static

Geekband C++面向对象高级编程(上) 第二周笔记 暗影行者_第10张图片

 1.调用相同的函数,传给他们不同的地址,这样才有机会去处理不同的数据。
 2.静态函数没有this pointer
 3.静态函数只能处理静态数据。
 4.class中的静态数据一定要在class外面写上定义!!!
 5.调用static函数的方式有二:
   a.通过object调用
   b.通过class name调用

class templete 类模板:

类模板会造成代码必要的膨胀

革命尚未成功,同志仍需努力!

你可能感兴趣的:(String,C语言)