Effective C++(三):资源管理

个人读书记录,不适用教学内容。

目录

条款13:以对象管理资源

条款14:在资源管理类中小心copying行为

条款15:在资源管理类中提供对原始资源的访问

条款16:成对使用new和delete时要采取相同形式

条款17:以独立语句将newed对象置入智能指针


条款13:以对象管理资源

说白了就是依赖于C++的析构函数自动调用机制确保资源被释放。

由此想到智能指针。RAII(Resource Acquisition Is Initialization)

条款14:在资源管理类中小心copying行为

简言之,就是对于RAII类或者就是普通类的复制,可采取如下方式:

  • 禁止复制:将copying行为声明为private
  • 对资源使用引用计数法(shared_ptr)
  • 深拷贝
  • 转移资源拥有权(参考C++11的std::move)

条款15:在资源管理类中提供对原始资源的访问

条款16:成对使用new和delete时要采取相同形式

说白了就是:用new就用delete,用new []就用delete [],不能互相串着用。

这里值得学习的是单一对象和对象数组的内存布局,以及delete如何知道内存存有多少对象。这个决定了有多少个析构函数必须被调用。

这只是一个例子,在不同编译器可能实现不同。

对于delete,原文如下:

”由你来告诉delete:如果你使用delete加上[],delete便认定指针指向一个数组,否则它便认定指针指向单一对象“

"假如内存布局如上,delete会读取若干内存并将它解释为数组大小,然后开始多次调用析构函数,浑然不知他所处理的那块内存不是个数组"

条款17:以独立语句将newed对象置入智能指针

说白了就是尽量要这样写代码:

而不要这样:

因为你不知道priority()内部会不会抛出异常从而跳出这个语句,导致内存泄漏

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值