3.资源管理

Item13:以对象管理资源(智能指针)

Use objects to manage resources.
RAII(Resource Acquisition Is Initialization):资源获取时便是初始化时。

Item14:在资源管理类中小心copying行为

Think carefully about copying behavior in resource-managing.
shared_ptr使用注意点:
当处理Mutex互斥器对象时,有lock和unlock函数。

void lock(Mutex *pm);
void unlock(Mutex *pm);
Mutex m; //构造时lock,析构时unlock
shared_ptr<Mutex> sp(&m);

用shared_ptr管理时,当引用计数为0时,sp将释放所指对象,可以通过显示指定删除器来解决。

shared_ptr<Lock> sp(&l, unlock);

引用计数为0时,对该互斥对象解锁。

Item15:在资源管理类中提供对原始资源的方向

Provide access to raw resources in resource-managing classes.

  • shared_ptr通过get函数来获取原始指针。
  • 隐藏了客户不需要的部分,但备妥客户所需的但所有东西

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

Use the same form in corresponding uses of new and delete.

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

Store newed objects in smart pointers in standalone statements.

fun(shared_ptr<A>(new A),g());

如果运行顺序如下(编译器对语句内进行优化)
  ①new A
  ②g( )
  ③shared_ptr构造函数
若g( )抛出异常则会导致内存泄漏,为了避免此类语句的潜在危害,我们应该这样写:

shared_ptr<A> sp(new A);     //以独立语句将newed对象置入智能指针中
fun(sp,g());
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值