2020校招备战日记10.01 ---- 函数重载,new和malloc,使用智能指针的类,shared_ptr和weak_ptr结合使用

这篇日记是7月23号的草稿,那是我从第一家实习公司辞职之前一个星期,从那之后一直在第二家公司实习,太忙了没精力写日记了。学习的时间也很少。国庆中秋8天假,我要好好珍惜,沉淀沉淀,把过去的知识复习一下,也把实习期间学习的东西整理整理。总之,过一个充实且惬意的国庆假期吧。不要太累,也不要太颓废就好。

函数重载

  1. 同一个作用域内的几个函数名字相同,但是形参列表不同,那么就是函数重载。
  2. 函数体是否有const修饰,也会形成重载。例如,一个const对象,如果调用一个成员方法,那么会优先调用const修饰函数体的成员方法。
  3. 可以根据形参是否为low-level const 来重载。例如,如果实参是常量,那么会优先调用形参为low-level const的函数;相反的,如果实参是非常量,那么会优先调用形参为非const的函数。

和重写的区别:

重写是针对虚函数而言的,子类的虚函数会覆盖父类的虚函数。重写的两个虚函数的形参列表必须相同。

new和malloc

  1. new一定要和delete配对使用。

  2. C++的new有一个基本的含义无法改变:

    第一步:调用operator new。
    第二步:执行构造函数。

其中operator new 就是分配内存,默认的就是使用malloc来实现。

使用智能指针的类

用智能指针实现了一个观察者模式。
学生观察老师。
在老师类当中保存观察者。老师没说一句话,就会通知到每一个学生,调用每一个学生的update虚函数,每个学生的虚函数实现都不一样。

实现的关键就是:
1. 在subject类中保存observer的父类指针。
2. 当subject对象有更新的时候,用每一个observer的父类指针调用虚函数,从而达到动态绑定的效果。

shared_ptr和weak_ptr结合使用

在上述的观察者模式中,如果是比较简单的版本,那么observer就只是简单的接收subject传过来的参数,不需要观察subject本身的其他信息。

但是如果是进阶版本,比如说,学生需要观察老师的状态,再根据老师说的话,来做出相应的行为,那么学生类就要保存老师类的一个指针。这样两个对象就都各自保存了对方的指针,这就导致main函数中一旦创建两个对象,双方的引用计数都是2,当外部智能指针被销毁的时候,引用计数也不会变成0,因此会造成内存泄露。

所以可以让学生的老师指针用weak_ptr, 这样老师的引用计数就是1了,而学生的引用计数虽然是2,但是可以减到0,因为外部指针销毁会减1, 老师对象销毁,又会减1,这样就可以保证不会内存泄露了。weak_ptr通过避免双方引用计数都为2的情况,来避免互相不能销毁的死锁状态。

要注意的是,weak_ptr在调用虚函数的时候,需要用lock()函数检查对象是否存在,同时转成shared_ptr才能使用。

具体可见我的github----设计模式

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值