2011/6/22日札记

  C++标准程序库这本书已经进行到第四章,已经逐步进入正题,很多东西看了虽说能理解,却在整体上有些模糊,我越发觉得有些札记的必要了。况且,记录下学习的点滴,本身也是件很有趣的事。

  今天是23号,我写昨天的学习。主要是因为芜湖晚上蚊子太多,必须进蚊帐,不能用电脑,我便在蚊帐里看书。主要看了2个东西,一个是 pair,一个是auto_ptr;对于札记,我只写以前不是很清楚,现在有些清楚或是仍然没有清楚的东西,对于以前就很清楚的便不写了。先说说pair,make_pair()让我收获颇丰,虽然以前在primer里看过,但是早已模糊。make_pair()真是方便的好东西,他使你无须写出型别,就可以生成一个pair对象。况且,使用make_pair()并不会多花你任何执行时间,编译器应该会将此动作优化。比如std::pair<int,char>(100,'a')你可以写成std::make_pair(100,'a'),正如我前面所说,他的方便便是让你无须再写出型别。然而,并非所有情况下你都采用make_pair去代替指出型别的算式。因为如果一个算式明确指出兴别,他带有一个优势,产生出来的pair将有绝对明确的型别。比如:std::pair<int,float>(100,1.11)和std:make_pair(100,1.11)便是不同的,后者所产生的第二元素的型别是double.当我们使用重载函数或模板时,确切的型别就非常重要了。

  再来说auto_ptr,还记得函数的操作模式么?1.获取一些资源。2.执行一些动作。3释放所获取的资源。看到没?要释放资源。也许你会说:“如果一开始获取的资源被绑定于局部对象身上,当函数退出时,它们的析构函数会被调用,从而自动释放这些资源了”。然而事情并非你想的那么顺利,如果资源是以显示手法获得,而且没有被绑定在任何对象身上,那就必须以显示手法释放(如new 和delete).经常忘记写delete不说(特别是有return语句时),一旦异常发生,真正的灾难就会来临。因为异常一旦发生,函数将立刻退离,根本不会调用函数尾端的delete语句。结果可能是内存遗失,防止遗失,我们可能会想到捕捉异常,然而当你真正写出捕捉异常时,你就会发现代码变得异常的庞大繁琐,且每个对象都要捕捉一次。这是难以想象的,而且复杂容易出错。这时,智能指针便闪亮登场, 这个智能指针应该保证,在任何情况下,只要自己被摧毁,就一定释放其所指的资源。(由于,智能指针本身就是区域变量,他完美地符号了这一特征,即当函数退出,它立即被摧毁)。auto_ptr便是这种指针。如我们可以写std::auto_ptr<Class a> ptr(new Class a),不再需要delete,不再需要catch.

有一点还要知道:只有auto-ptr可以拿来当做另一个auto_ptr的初值,普通指针是不行的。 


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值