ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、视频、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
## 条款14:在资源管理类中小心 copying 行为 Think carefully about copying behavior in resource-managing classes. ### 为什么要实现资源管理类 并非所有的资源都是 heap-based,而对于此类资源,智能指针可能不适合作为资源掌管者(resource handlers),例如互斥锁资源: ```cpp class Lock { public: explicit Lock(Mutex* pm): mutexPtr(pm) { lock(mutexPtr); // 获得资源; } ~Lock() { unlock(mutexPtr); // 释放资源; } }; ``` ### 资源管理类的复制问题 一般解决方法有以下几种: * 禁止复制; * 对底层资源使用引用计数法:通常只要内含一个 `tr1::shared_ptr` 成员变量,就可以实现引用计数;其中引用计数型智慧指针允许指定删除器(deleter,一个函数或者函数对象),当引用次数为 0 时便被调用; ```cpp class Lock { public: explicit Lock(Mutex* pm): mutexPtr(pm, unlock) { lock(mutexPtr.get()); } private: std::tr1:shared_ptr<Mutex> mutexPtr; }; ``` * 复制底部资源; * 转移底部资源的拥有权;