C++标准程序库细节整理(一)第四章

一、pair的总结:

1、class pair 可以将两个值视为一个单元,尤其容器类别map和multimap,就是使用pairs来管理其键值/实值的成对元素。任何需要返回两个值,也需要pair。

2、pair类是struct结构,不是class结构,所以成员都是public。

3、pair的一些操作:初始化、赋值、比较、便捷函数(make_pair())。

二、auto_ptr的总结:

1、auto_ptr设计的目的:帮助程序员防止“被异常抛出时发生资源泄露”。智能型指针本身就是区域变量,所以无论正常退出,还是异常退出,它就一定会被销毁。它是“它所指向的对象"的拥有者。所以,当身为对象拥有者的auto_ptr被摧毁时,该对象也将遭到摧毁。aotu_ptr要求一个对象只能有一个拥有者,严禁一物二主。

2、注意:auto_ptr<>不允许你使用一般指针惯用的赋值(assign)初始化方式。你必须直接使用数值来完成初始化。

3、auto_ptr的copy构造函数和assignment操作符将对象拥有权交出去。某个函数可以利用auto_ptr将拥有权转交给另一个函数:(1)某个函数式数据的终点。如果aut_ptr以by value方式被当做一个参数传递给某函数,就是这话总情况。此时被调用端的参数获得了这个auto_ptr的拥有权如果函数不在将它传递出去,它所指的对象就会在函数退出时被删除;(2)某函数是数据的起点。当一个auto_ptr被返回,其拥有权便被转交给调用端了。

4、当传递进函数的auto_ptr在函数退出时被销毁,所以退出时该智能指针无法使用,靠pass by reference或constant reference都无法更改auto_ptr对象的拥有权。关键字const并非意味你不能更改auto_ptr所拥有的对象,而是意味你不能更改auto_ptr的拥有权。

5、使用auto_ptr时需要注意一下几点:

(1)、auto_ptrs之间不能共享拥有权。

(2)、并不存在针对array而设计的auto_ptrs。auto_ptr不可以指向array,因为auto_ptr是透过delete而非delete[]来释放其所拥有的对象。C++标准中并没有提供针对array而设计的auto_ptr。

(3)、auto_ptrs决非一个”四海通用“的智能指针。注意它不是引用技术型指针。

(4)、auto_ptr不满足STL容器对其元素的要求。因为在拷贝和赋值动作之后,原本的auto_ptr和新产生的auto_ptr并不相等。

6、const auto_ptr具有常熟性,其拥有权不得被更改。

7、auto_ptr的一些内部介绍:

(1)、auto_ptr::element_type所拥有之对象的型别

(2)、构造函数、赋值函数、析构函数

(3)、数值存取、数值操作

三、数值极限的极值是一个与平台相关的特性。C++标准库通过template提供了这些极值,方便写出与平台无关的程序。其中整数常数定义于<climits>和<limits.h>中,浮点型定义在<cfloat><float.h>中。

四、算法程序库中<algorithm>定义了三个辅助函数,一个用来在两值之中挑选最大者,另一个用来在两值之中挑选最小者,第三个用来交换两值。

五、头文件<cstddef><cstdlib>中定义了一些常用的常量、宏、型别和函数。

1、exit(int status)退出。其中EXIT_SUCCESS是正常退出,EXIT_FAILURE是程序不正常结束。

2、abort()退出程序(在某些系统上可能导致系统崩溃)。

3、atexit(void (*function()))退出(exit)程序时调用某些函数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值