初学C++之通用工具(一)

来源:互联网 发布:监控软件 linux 排行 编辑:程序博客网 时间:2024/05/22 16:50
1.大部分通用工具都定义在标准头文件<utility>.
2.pair是保存键值对的主要结构体。make_pair()生成pair类型,例如 std::make_pair(43,"ss"); 等同于std::pair<int,string>(43,"ss");在map和multimap中该函数体现的非常好。
3.智能指针auto_ptr在memory中声明:防止内存泄露,比如在delete之前return或则在delete之前出现异常。创建一个智能指针:std::auto_ptr<classA> ptr(new classA);智能指针和对象时一一对应的,如果一个指针出现转移的现象,那么对应的对象马上会被回收。但是当程序员在初始化2个智能指针的时候用的相同的一个对象,那么这个2个智能指针将会指向同一个对象,程序员应该避免改问题。
4.auto_ptr在函数作为参数调用或者被函数的返回值返回时会更改所有权,我们可以用const修饰符阻止此种情况。const T* p和T* const p 一个是指向常数的指针,后面是常数指针,指针自己不会变。我们最好不要用智能指针作为参数出入函数也不要把它作为返回值返回。
总结:为了指针的的泄露使用了智能指针,智能指针当做参数或者返回值的时候会转移所有权,为了阻止此种事情使用了const类型的智能指针,如果函数调用的时候使用的是非const智能指针,在传递参数时候使用的是智能指针那么在编译时会出错,只有在函数参数显示是传递的是智能指针的时候调用智能指针才不会出错。在容器中调用const类型的智能指针作为参数添加到容器时,犹豫智能指针的设计将会出现编译出错【其他类型可以用常引用类型传入到容器中,在容器中通过复制的方式实现】。
5.只有类被构造成功后才能有析构函数一说。
6.智能指针注意事项:1)一个智能指针不能指向另一个智能指针所拥有的对象(2个智能指针在初始化时使用同一个对象)2)不存在array智能指针,因为智能指针通过delete释放所拥有对象,不是delete[],对于数据群标准c++提供了多种容器进行管理。3)智能指针非引用型计数指针,引用型指针表示一个或多个指针指向同一对象,当最后一个指向该对象的指针销毁时才销毁该对象。4)智能指针不满足STL标准容器,因为在拷贝和赋值的时候会交出原来智能指针的拥有权,并不是拷贝给新的智能指针。所以不要把智能指针作为容器的元素。
7.auto_ptr(T* p)这个p指向的对象必须是New出来的,因为在智能指针中会默认调用该对象的delete操作。智能指针的拷贝函数和平常的拷贝函数不一样,他是哪原来的对象转移到现在的智能指针,原来的智能指针出现null,平常的拷贝函数是把原来的值复制一份出去。在智能指针被提取值前请先调用get()方法判断返回值是否为null
8.numeric_limits<>指定了数值类型的极值。头文件在<limits>中.
9.算法程序库中的3个辅助函数<algorithm>:选择最大值max,选择最小值min,交换2个值swap
10.辅助性“比较操作符” != ,>, <= ,>=四个比较操作符,在<utility>中声明,在std::rel_ops中定义。
11.C语言的函数库:<cstddef>和<cstdlib>对于C语言中的<stddef.h>和<stdlib.h>,其中这些定义了一些新的常熟,宏。类型和函数。C++中最好不要用null,最好用0取代null
12.exit()和abort():第一个会销毁所有static对象和缓冲区,关闭IO通道,关闭程序。之前会调用atexit().abort()会立即终止,不清理任何工作。这个2个函数指向都不会销毁局部变量,我们应该在异常机制或者正常返回机制中运用一些技术来调用局部变量的析构函数。

0 0
原创粉丝点击