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关键字已被用于其它
特性。
六、静态多态
STL模板_智能指针概念的更多相关文章
- STL模板_multimap_智能指针作为键值
map的键值的类型 -可以是自定的类型(对象.函数指针.智能指针....) -但是有副作用-当自己定义的类型键值无法用系统自己提供的 < 或者 > 进行排序的时候,会出现各种问题 -所以需 ...
- 智能指针类模板(上)——STL中的智能指针
智能指针类模板智能指针本质上就是一个对象,它可以像原生指针那样来使用. 智能指针的意义-现代C++开发库中最重要的类模板之一-C++中自动内存管理的主要手段-能够在很大程度上避开内存相关的问题 1.内 ...
- 转载:STL四种智能指针
转载至:https://blog.csdn.net/K346K346/article/details/81478223 STL一共给我们提供了四种智能指针: auto_ptr.unique_ptr.s ...
- 【STL学习】智能指针之shared_ptr
前面已经学习过auto_ptr,这里补充另外一种智能指针,比auto_ptr要更强力更通用的shared_ptr. shared_ptr 简介及使用选择 几乎所有的程序都需要某种形式的引用计数智能指 ...
- C++_day06_运算符重载_智能指针
1.只有函数运算符可以带缺省函数,其他运算符函数主要由操作符个数确定 2.解引用运算符和指针运算符 示例代码: #include <iostream> using namespace st ...
- STL模板_容器概念
一.STL(Standard Template Library,标准模板库)概述1.容器:基于泛型的数据结构.2.算法:基于泛型的常用算法.3.迭代器:以泛型的方式访问容器中的元素,是泛型的算法可以应 ...
- STL模板_概念
模板和STL一.模板的背景知识1.针对不同的类型定义不同函数版本.2.借助参数宏摆脱类型的限制,同时也因为失去的类型检查而引 入风险.3.借助于编译预处理器根据函数宏框架,扩展为针对不同类型的 具体函 ...
- STL模板_十大容器概念
一.向量(续)1.大小和容量大小:容器中元素的个数.容量:容器中可容纳元素的个数.size_type size (void) const; // 获取大小void resize (size_type ...
- 【STL学习】智能指针之weak_ptr
简介 weak_ptr是shared_ptr的观察者,它不会干扰shared_ptr所共享对象的所有权,当一个weak_ptr所观察的shared_ptr要释放它的资源时,它会把相关的weak_ptr ...
随机推荐
- hdu 4602 Partition(矩阵快速幂乘法)
Problem Description Define f(n) , we have =+++ =++ =++ =++ =+ =+ =+ = totally ways. Actually, we wil ...
- wx.Dialog
wx.Dialog A dialog box is a window with a title bar and sometimes a system menu, which can be moved ...
- oracle 物化视图导入导出报错
1.exp导出报EXP-00008: 遇到 ORACLE 错误 1455,ORA-01455: 转换列溢出整数数据类型 2.imp导入报.注: 表包括 ROWID 列, 其值可能已废弃,不是警告也不是 ...
- 使用Vitamio打造自己的Android万能播放器(3)——本地播放(主界面、播放列表)
前言 打造一款完整可用的Android播放器有许多功能和细节需要完成,也涉及到各种丰富的知识和内容,本章将结合Fragment.ViewPager来搭建播放器的主界面,并实现本地播放基本功能.系列文章 ...
- DDL
在DDL(Data Definition Language)中,创建.删除.修改使用create.drop.alter关键字 数据库的创建 create database 数据库名选择数据库 use ...
- 引用jquery框架后出错
问题描述:当引用了jquery框架后,页面的js不能正常工作. 后面我的解决办法:是因为在引用 jquery的框架时的代码为 <script type="text/javascript ...
- 用正则表达式替换内容 php
以前做一个项目,就是有一个问答的页面,比如说在回答或者提问的内容中插入表情.写到内容里的是表情图片的名字(而且是不带后缀的,比如:f_002.png)表情包放在项目里,我需要在取除内容的时候将里面的表 ...
- eclipse中安装svn插件实现版本控制
打开eclipse -> Help ->Install New Software选项, 点击Add按钮 根据需要,添加自己需要的版本svn控制器的版本,填写name和url,点击ok. N ...
- google base库中的WaitableEvent
这个类说白了就是对windows event的封装,没有什么特别的,常规做法,等侍另一线程无非就是等侍事件置信waitsingleobject,通知事件无非就是setevent,一看就明白,不就详解, ...
- Java 7源码分析第13篇 - 字节输入输出流(1)
上一篇介绍了关于字节输入输出流的Java类框架,同时也简单介绍了一下各个类的作用,下面就来具体看一下这些类是怎么实现这些功能的. 1.InputStream和OutputStream InputStr ...