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

什么是资源?

资源就是一旦使用,将来必须交还给系统,否则会发生各种异常情况。典型的资源就是动态内存分配。
其他常见资源包括互斥锁、数据库连接、画刷、网络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对象指向一个指定资源,即使在被复制的情况下也是如此,此时的资源拥有权会从复制物转移到目标物。

三.在资源管理类中提供对原始资源的访问

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值