101.类模板可以被局部特化,可以指定类模板的特定实现,并要求某些类型参数仍然必须由模板的用户指定。
102.为什么需要特化,而不重新定义新类:
(1)特化和重新定义新类看上去没有本质区别,但是如果定义新类,那么将变成一个类模板和一个新类,使用的时候需要考虑究竟是用类模板还是用新类。
(2)特化可以以统一的方式使用类模板和特化类,编译器自动优先选择特化类。
103.非类型模板参数的限制:
(1)变量不能作为模板参数。
(2)浮点数和类对象不能作为模板参数。
(3)全局指针不能作为模板参数。
编译器的推导过程是在编译阶段完成的。因此,编译器的推导必须依赖于特化类,否则推导过程无法结束。
104.在实际工程中内存操作是bug的重要来源,C++将堆内存交由程序员自由使用,因此:
(1)未及时释放,将产生内存泄漏。
(2)重复释放同一段内存,后果未知。
(3)使用越界,操作了不属于自己的内存。
105.内存越界的问题常发生于数组的使用中:
(1)解决方案:数组类。
(2)工程中,在非特殊情况下,要求开发者使用预先编写的数组类对象代替C语言中的原生数组。
106.内存泄漏和内存多次释放常发生于指针的使用过程中:
(1)解决方案:智能指针。
(2)工程中,要求开发者使用预先编写的只能能指针类对象代替C语言中的原生指针。
107.工程中的智能指针是一个类模板:
(1)通过构造函数接管申请的堆内存。
(2)通过析构函数确保堆内存被及时释放。
(3)通过重载指针运算符*和->模拟指针的行为。
(4)通过重载比较运算符==和!=模拟指针的比较。
108.什么是STL?
(1)STL,即:Standard Template Library,是C++的一部分。
(2)STL是常用数据结构和算法的集合。
(3)STL的目标是标准化组建,提高开发效率和程序可靠性。
109.STL库作为C++的一部分与编译器一同被发布。
110.STL主要由以下3部分组成:
(1)容器:管理数据的集合。
(2)算法:处理集合内的元素。
(3)迭代器:遍历集合内的元素。