C++函数模板与内存管理
一:模板
定义:若一个程序的功能是对某种特定的数据类型进行处理,则将所处理的数据类型说明为参数,就可以把这个程序改写成模板,模板可以让程序对任何其他数据类型进行同样方式的处理。
C++程序由类和函数组成,模板也分为类模板(class template)和函数模板(function template)。因此,可以使用一个带多种不同数据类型的函数和类,而不必在意数据类型的各种情况。
示例:
template<class A,class B>
void swap(A& a,B& b){
A temp=a;
a=b;
b=temp;
}
上面这段代码实现了两个数据变量的交换,若是在C语言中,不同类型的数据就必须定义不同的交换函数,而他们的代码除了类型外完全相同,这就使代码显得冗余,使用函数模板之后就只需定义一个函数,函数模板会根据我们调用时的实参形成对应类型的函数。所以这只是把我们程序员的工作交给编译器罢了。类模板的使用跟函数模板相差不多。
示例:
template<class T>
class Stack
{
private:
T* a;
int top;
int capacity;
}
二:内存管理
C++中用来内存管理的运算符有new和delete,它们和C语言中的malloc和free有着相似的作用。
区别:new的delete是运算符,malloc和free是函数
new=开辟空间+调用构造函数
delete=调用析构函数+释放空间
malloc=开辟空间
free=释放空间
为什么C++要创建new的delete来内存管理?因为malloc和free等无法做到自定义类型的内存管理,而new和delete有调用构造函数和析构函数的作用,故能够做到自定义类型的内存管理。
new的语法: 类型指针 变量名 = new 类型
类型指针 变量名 = new 类型[](要开辟多个变量类型的空间时)
delete语法: delete 变量名
delete []变量名 (要释放多个变量类型的空间时)
示例:
int * a = new int;
int * b = new int[10];//给b开辟一个装有10个变量的数组
delete a;
delete[] b;