EffectiveC++一些心得

effective c++也看了好多遍了,但一直走马观花的看,不久就忘了,最近想重拾起来写点心得,
3.11
Resource Management
首先是智能指针
在c++11之前auto_ptr是智能指针的主流,满足RAII的所有要求。
RAII的概念其实也不难(下面大段抄袭概念)
RAII是C++的发明者Bjarne Stroustrup提出的概念,RAII全称是“Resource Acquisition is Initialization”,直译过来是“资源获取即初始化”,也就是说在构造函数中申请分配资源,在析构函数中释放资源。因为C++的语言机制保证了,当一个对象创建的时候,自动调用构造函数,当对象超出作用域的时候会自动调用析构函数。所以,在RAII的指导下,我们应该使用类来管理资源,将资源和对象的生命周期绑定。
简单来说就说不用因为自身疏忽忘记写delete导致大段的内存泄漏,laziness is the First Productivity。
auto_ptr有一个很致命的缺点不能让多个对象指向一个指针,这样会导致一个对象被删除多次,导致未定义行为。为了防止这种行为,auto_ptr就在复制拷贝函数动了手脚,如果原指针使用了拷贝构造函数,那么原指针就会指向NULLPTR,新指针唯一拥有资源。这造成了一定的麻烦。
C++11引入了unique_ptr作为进阶版。auto_ptr的拷贝构造函数不大符合直观感受,因此unique_ptr直接禁用了拷贝构造函数。此外auto_ptr不支持STL容器,unique支持STL容器。此外unique_ptr也支持作为函数返回值。
shared_ptr作为另一个方面的进阶版,支持一个指针指向多个对象,具体是通过引用计数法实现的,具体实现可以看网上各位大佬的代码,也就是说允许多个该智能指针共享第“拥有”同一堆分配对象的内存,这通过引用计数(reference counting)实现,会记录有多少个shared_ptr共同指向一个对象,一旦最后一个这样的指针被销毁,也就是一旦某个对象的引用计数变为0,这个对象会被自动删除。
weak_ptr 是一种不控制对象生命周期的智能指针, 它指向一个 shared_ptr 管理的对象. 进行该对象的内存管理的是那个强引用的 shared_ptr. weak_ptr只是提供了对管理对象的一个访问手段.。更多是用来接循环引用的问题。
对于资源管理类很重要的一点就是如何管理其拷贝,一般采取禁止拷贝和引用计数的方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值