【14】在资源管理类中小心copying行为

1、为什么要使用资源管理类?

  资源管理类的思路就是,栈上的对象,封装堆上分配的资源,确保一定会释放资源。auto_ptr和shared_ptr就是资源管理类,行为上像指针。

2、auto_ptr和shared_ptr用来管理,堆上分配的内存,在auto_ptr和shared_ptr的析构方法中,执行delete。对于其他资源,auto_ptr和shared_ptr并不适合作为资源管理类。考虑互斥锁mutex,有普通方法lock和unlock,提供一个资源管理类Lock,管理mutex。资源管理类Lock被复制,将发生什么情况?该怎么办?

  a、禁止复制;

  b、采用引用计数法,也就是shared_ptr,可以共享资源,注意:当引用计数为0的时候,不是delete,而是unlock,提供给shared_ptr一个删除器;

  c、深度复制,复制指针指向的内容;

  d、转移资源的拥有权;

posted on 2014-01-09 19:33  Andy Niu  阅读(410)  评论(0编辑  收藏  举报