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

C++面向对象高级编程

第二周结构框图:

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

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

String class:

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

string-test.cpp

下面讲解Big Three:

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

笔记注释都下在图里面了

构造函数与析构函数:

这里写图片描述

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

堆栈内存讲解点我
这里写图片描述

拷贝构造函数:

这里写图片描述

拷贝赋值函数:

(笔记在图上)
这里写图片描述

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

这里写图片描述

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

8.堆,栈与内存管理:

output函数:

这里写图片描述

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

所谓堆栈:

这里写图片描述

堆对象的生命期

这里写图片描述

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

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

这里写图片描述

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

array new一定要搭配array delete

这里写图片描述

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

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

进一步补充:static

这里写图片描述

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

class templete 类模板:

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值