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对象指向一个指定资源,即使在被复制的情况下也是如此,此时的资源拥有权会从复制物转移到目标物。
三.在资源管理类中提供对原始资源的访问
资源就是一旦使用,将来必须交还给系统,否则会发生各种异常情况。典型的资源就是动态内存分配。
其他常见资源包括互斥锁、数据库连接、画刷、网络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对象指向一个指定资源,即使在被复制的情况下也是如此,此时的资源拥有权会从复制物转移到目标物。
三.在资源管理类中提供对原始资源的访问
相关文章推荐
- J2EE资源管理常见策略总结
- 电脑资源管理方法总结。
- 关于管理的点滴总结--人的价值取决于其具备的资源
- 简单总结Unity使用Resources类资源管理
- 学习总结-Active Directory 域服务管理03-导入资源
- 电信资源管理系统性能测试总结
- Unity中项目资源管理的一些经验与总结
- J2EE常用资源管理方式总结
- 信息资源管理总结
- 京东前端工程化和静态资源管理全面总结
- iPhone开发:iPhone工程资源管理,资源路径总结
- 信息资源管理初步总结
- SCM配置管理技术总结及要点回顾
- 信息资源管理总结
- 自考 计算机信息管理之信息资源管理 (课本总结)
- SCM配置管理技术总结及要点回顾
- 黑马程序员_学习笔记8用类加载器的方式管理资源和配置文件及类加载器的总结
- 对于信息资源管理的一点总结。。。
- 自考总结之信息资源管理
- 京东前端工程化和静态资源管理全面总结