您的位置:首页 > 编程语言 > C语言/C++

Effective C++读书笔记---资源管理要点总结

2016-08-09 22:00 190 查看
什么是资源?

资源就是一旦使用,将来必须交还给系统,否则会发生各种异常情况。典型的资源就是动态内存分配。

其他常见资源包括互斥锁、数据库连接、画刷、网络sockets等。

有效管理资源的方式:

一 .以对象管理资源,确保两点:

a.获得资源后立刻放进管理对象内。

b.管理对象运用析构函数确保资源被释放。

典型的以对象管理资源的例子为:

1.autoPtr

AutoPtr 在拷贝赋值时
//对象类指针
void AutoPtrTest()
{
//pInv造退出此函数时在自身的析构函数中会自动删除pInv;
auto_ptr<int> pInv(CreatePtr());
auto_ptr<int> pInvCopy = pInv; //进行拷贝构造后,原有的指针为空,现有的指针获得原有指针地址
cout<<"原有的指针地址为"<<pInv.get()<<endl;
cout<<"现有的指针地址为"<<pInvCopy.get()<<endl;
}auoPtr会在析构函数中自动调用释放指针资源,用户无需操心资源的释放问题。

2.sharedPtr
//引用计数型智慧指针
void SharedPtrTest()
{
std::tr1::shared_ptr<int> pInv(CreatePtr());
std::tr1::shared_ptr<int> pInvCopy(pInv);
cout<<"原有的指针地址为"<<pInv.get()<<endl;
cout<<"现有的指针地址为"<<pInvCopy.get()<<endl;
}sharedPtr含有计数功能,会在当前没有任何使用实例后在析构函数中自动释放资源。
两个指针都只适用于单个指针,不适用于指针数组。

二. 小心资源管理类中的copy行为

RAII:资源取得的时机便是初始化时机。

对于很多RAII对象,其使用可能是独占的,因此其本身被复制并不是合理的行为。

可以采取四种方法进行优化:

1.禁止复制(禁止拷贝的方法在前面已经讲过)

2.对底层资源采用“引用计数法”,此类情况的应用场合便是我们希望保有资源,直到它的最后一个使用者被销毁。

此时复制RAII对象时,应该将资源的“被引用数”递增,shared_ptr便是如此。

3.采用深度复制行为,可以对一份资源复制出任意数量的副本。

4.转移底部资源的拥有权,在某些场合下希望永远只有一个RAII对象指向一个指定资源,即使在被复制的情况下也是如此,此时的资源拥有权会从复制物转移到目标物。

三.在资源管理类中提供对原始资源的访问
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  C++ 资源管理