目录
2.2 new与malloc的区别,delete与free的区别
operator new与operator delete的使用:
1.内存管理
1.C/C++内存分布
C/C++中的内存区域可分为以下几个:
1.栈区:主要储存函数的参数,局部变量,返回数据,返回地址。栈区的数据会在函数结束时由编译器自动清理。栈区的内存地址从高地址向低地址开辟,向下增长。
2.堆区:主要储存动态开辟的变量,堆区的数据必须由程序员自己清理。堆区的内存地址从低地址向高地址开辟,向上增长。
3.数据段(静态区):主要储存全局变量,静态变量。程序结束数据由编译器释放。
4.代码段(常量区):存放函数体(类成员函数和全局函数)的二进制代码。只读常量。
2.new与delete
2.1 new与delete的用法
2.2 new与malloc的区别,delete与free的区别
对于自定义类型而言,malloc只是单纯的开辟一个空间,而new会开辟一个空间后调用自定义类型的构造函数。free只会释放该空间,而delete会先调用该变量的析构函数再释放该空间。
3.new与delete的底层实现原理
new是一个操作符,本质是调用全局函数operator new来开辟空间,对于自定义类型,会调用其构造函数。delete是一个操作符,对于自定义类型,会调用其析构函数,再调用全局函数operator delete来释放空间。
operator new与operator delete的使用:
operator new本质上是通过malloc开辟空间,不同的是,malloc申请空间失败会返回空指针,而operator new会抛异常。
operator new与operator delete是对malloc与free的封装。
operator new []实际上是对operator new的多次调用,operator delete[]是对operator delete的多次调用。
4.定位new
定位new是在一个已原始分配的内存空间上调用构造函数初始化一个对象。
2.模板初阶
泛型编程是一种软件工程方法论,它强调使用高度抽象的方式来编写算法和数据结构,使得同一套代码可以适用于多种数据类型。模板是实现泛型编程的基础。
2.1 函数模板
实现任意类型两个数相加:
函数模板的实例化:
函数模板的实例化是指编译器遇到模板函数时,会通过函数参数类型自动推导出模板参数类型,生成对应的模板函数。函数模板的实例化在编译时进行实行。
模板参数的匹配规则:
1.如果传入的函数参数与非模板函数匹配,那么编译器会优先调用非模板函数。
2.如果传入的函数参数可以与模板函数参数匹配,那么编译器会调用该模板函数。
2.2 类模板
模板类的使用必须在实例化对象时指明模板参数类型。