《Effective C++》读书笔记(四)
《Effective C++》读书笔记(四)
《 Effective C++ 改善程序与设计的 55 个具体做法》资源管理
以对象管理资源
为了确保资源总是被释放,可以把资源放进对象内,然后当控制流离开时,该对象的析构函数会自动释放那些资源。
std::tr1::shared_ptr 就是这样的,它是”引用计数型智慧指针“ (reference-counting smart pointer; RSCP) ,会持续追踪共有多少对象指向某笔资源,它在其析构函数内做 delete ,当无人指向它时会自动删除资源,但它无法打破环状引用。
除此之外, tr1::shared_ptr
允许指定”删除器“ (deleter) ,那是一个函数或者函数对象,当引用次数为 0 时便被调用,如:
class Lock
{
public:
explicit Lock(Mutex *pm) // 以某个 Mutex 初始化 shared_ptr
: mutexPtr(pm, unlock) // 并以 unlock 函数为删除器
{
lock(mutexPtr.get()); // get 显示转换,返回智能指针内部的原始指针
}
private:
std::tr1::shared_ptr<Mutex> mutexPtr;
};
Subscribe to bbbiggest's blog
Get the latest posts delivered right to your inbox