1.auto_ptr和shared_ptr只是适合用于管理heap(堆)上的内存,即动态分配的内存,但不是所有的资源都在heap上
所有这两个智能指针并不适合用于资源管理,所有需要建立自己的资源管理类
2.lock和unlock管理互斥对象Mutex的指针
void lock(Mutex *pm)
void unlock(Mutex *pm)
希望在构造函数时调用lock(),在析构时调用unlock(),所有构建一个类
class MagMutex { public: MagMutex(Mutex *pm):pClassM(pm) { lock(pClassM); } ~MagMutex(Mutex *pm) { unlock(pClassM); } private: Mutex *pClassM; };
这样的一个初始化时分配资源的类,对于对象使用拷贝函数时无法预定会发生什么情况
MagMutex m1(&pm);
MagMutex m2(m1); //不知道会发生什么情况
可以使用2种方法解决
(1) 禁止复制:将拷贝函数定义为private类型
(2) 使用"引用计数法":如tr1::shared_ptr
3.能否使用tr1::shared_ptr ?
如果把 Mutex * 改为shared_ptr<Mutex>,但是shared_ptr在引用次数为0时删除其所指的事物,而我们需要的是释放所指的事物(调用unlock())
还好,shared_ptr提供了删除器(auto_ptr没有),使用第二参数,是一个函数或者一个对象,当计数为0时被调用