行业知识
C++的内存管理和模板
2026-11-07 06:24:09
来源:互联网转载
文章目录
- 一、内存管理
- 1.内存的分布
- 2.C++中的动态内存管理
- 3.重载new和重载delete
- 4.new和delete的实现原理
- 5.定位new
- 二、模板
- 1.泛型编程
- 2.函数模板
- 1.定义模板
- 2.实例化模板
- 3.模板类型的参数
- 4.非类型模板参数
- 3.类模板
- 1.定义模板
- 2.实例化模板
- 3.模板的成员函数
- ���结
一、内存管理
1.内存的分布
这是在C语言中的内存分布,C++的内存分布也是这样。下面让我们看看C++中的动态内存开辟是什么样的吧。
2.C++中的动态内存管理
C语言内存管理方式在C++中可以继续使用,但有些地方就无能为力,而且使用起来比较麻烦,因此C++又提出了自己的内存管理方式:通过new和delete操作符进行动态内存管理。
int main(){int* ptr1 = new int; //动态申请一个int类型的空间char* cptr = new char; //动态申请一个char类型的空间int* ptr2 = new int(10); //动态申请一个int类型的空间并初始化为10int* ptr3 = new int[10]; //动态申请10个int类型的空间delete ptr1;//释放ptr1的空间delete cptr;//释放ptr1的空间delete ptr2;//释放ptr2的空间delete[] ptr3;//释放ptr3的空间return 0;}注意:申请和释放单个元素的空间,使用new和delete操作符,申请和释放连续的空间,使用new[]和delete[]。
操作案例:
class A{public:A(int a = 0) :a(a){cout cout cout A* ptr1 = new A(10);//分配并初始化一个A对象A* ptr2 = new A[10];//分配10个默认初始化的A对象delete ptr1;//销毁 *ptr1,并释放ptr1指向的空间delete[] ptr2;//销毁数组中的元素,然后释放相应的空间return 0; } barced initializer - list }//ptr现在指向的只不过是与A对象相同大小的一段空间,还不能算是一个对象,因为构造函数没有执行A* ptr = (A*)malloc(sizeof(A)); //注意:如果A类的构造函数有参数时,此处需要传参new(ptr)A;ptr-~A();free(ptr);return 0;}if (a