aihot  2020-11-12 09:23:36  OpenCV |   查看评论   
I类分别是:shared_ptr和unique_ptr,它们间不同的是shared_ptr允许存在同一内存区域的多个指针拷贝,而unique_ptr只允许一份指针指向对象,当uniuqe_ptr发生赋值操作时,用于赋值的指针将会变成null。

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

在实际管理资源时,并非所有的资源都是堆内存(heap),所以unique_ptr或shared_ptr这样的智能指针往往不适合作为资源管理者。

比如你需要控制类型为Mtux的互斥器对象,共有lock和unlock两函数可用,你需要保证的就是不要忘记将一个被锁住的Mutex解锁,我们的想法的主旨就是:资源在构造期间创建,在析构期间释放

class Lock { public:     explicit Lock(Mutex* pm) :mutexPtr(pm){ lock(mutexPtr;) }// 获得资源     ~Lock(){ unlock(mutexPtr); }// 释放资源  };

这样虽然很好,但是如果Lock被复制了,就会发生问题。它可能会引起对了一Mutex解锁两次。

常见的解决方案有2种:一种是禁止复制;第二种是对底层资源祭出“引用计数法”,这也是shared_ptr实现原理。

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

 

除特别注明外,本站所有文章均为 赢咖4注册 原创,转载请注明出处来自Effective C++笔记:资源管理

留言与评论(共有 0 条评论)
   
验证码:
[lianlun]1[/lianlun]