STL模板_智能指针概念

一、智能指针
1.类类型对象,在其内部封装了一个普通指针。当智能指针对象
因离开作用域而被析构时,其析构函数被执行,通过其内部封装
的普通指针,销毁该指针的目标对象,避免内存泄露。
2.为了表现出和普通指针一致的外观和行为,重载了解引用运算
符(*)和间接成员访问运算符(->)函数,令其使用者可以将
一个智能指针当成普通指针一样地使用。
3.智能指针没有拷贝语义,只有转移语义,任何时候都只有一个
智能指针对象持有真正的对象地址。
4.智能指针不支持对象数组。
二、模板的非类型参数
1.无论是函数模板还是类模板,其模板参数表中除了可以包含类
型参数以外,还可以包含值形式的参数,后者一般被称为分类型
参数。
2.类模板的非类型参数和类型参数一样,可以带有缺省值。函数模板的非类型参数和类型参数一样,不可以带有缺省值。
3.传递给模板的非类型实参,可以是常量、常量表达式、带有常属性(const)的变量及其表达式,但是不能具有挥发性(volatile)。
4.模板的非类型参数只能是整数类型
(signed/unsigned char/short/int/long/long long),不能
是浮点类型(float/double/long double),也不能是类类型。
5.模板的非类型参数可以是字符指针,但是所传递的实参必须是
具有外部链接特性的字符数组。
三、带参数的流控制符
\033[A;B;Cm
A: 控制码
0 - 默认
1 - 高亮
4 - 下划线
5 - 闪烁
7 - 反白
8 - 不可见
B: 背景色
40 - 黑
41 - 红
42 - 绿
43 - 黄
44 - 蓝
45 - 粉
46 - 青
47 - 白
C: 前景色
30 - 黑
31 - 红
32 - 绿
33 - 黄
34 - 蓝
35 - 粉
36 - 青
37 - 白
四、模板技巧
1.通过typename关键字解决嵌套依赖问题。
class - 定义类
\ 声明模板的
/ 类型参数
typename - 解决嵌套依赖
2.通过.template/->template结构访问模板参数的模板成员。
3.在子模板中访问基模板的成员。
4.模板的嵌套定义。
5.模板的模板型模板参数。
6.模板的模板型基类。
7.不能定义模板型虚函数。
虚函数调用机制需要依赖虚函数表,该表是在类模板被实例化时
产生的,而此时成员函数模板尚未被实例化,其入口地址和重载
版本的个数要等到编译器处理完对该函数的所有调用以后才能确
定。成员函数模板的后期编译阻碍了虚函数表的静态构建。
五、模板的编译模型
1.推荐使用分离模型
把类的声明放在一个.h中,把类的定义放在一个或多个.cpp中。
1)便于管理
2)便于维护,节省编译时间
3)只需要把.h/.o/.a/.so提供给类的用户,.cpp无需提供
2.包含模型
1)便于管理
2)延长编译时间
3).cpp必须同时提供
3.显式实例化
1)便于管理
2)便于维护,节省编译时间
3)只需要把.h/.o/.a/.so提供给类的用户,.cpp无需提供
4)无法实例化所有用户需要的类型
4.导出模型
1)便于管理
2)便于维护,节省编译时间
3)只需要把.h/.o/.a/.so提供给类的用户,.cpp无需提供
4)实例化类型不受约束
5)绝大多数的编译器并不支持
Edison Design Group, Inc
C++2011标准中已将此特性废除,export关键字已被用于其它
特性。
六、静态多态

上一篇:[译]在Linux上的提高MySQL/MariaDB安全性的12条建议


下一篇:C++基本规则