C语言内存管理方式在C++中可以继续使用,但有些地方就无能为力而且使用起来比较麻烦,因此C++又提出了自己的内存管理方式:通过new和delete操作符进行动态内存管理。
// 1. 单个类型空间的申请---new
int* ptr1 = new int;
int* ptr2 = new int(100); //申请空间的同时进行初始化
// 2. 一段连续空间的申请---new []
//int array[10]; // int[10]
//int a = 10;
int* ptr3 = new int[10];
int* ptr4 = new int[10]{1, 2, 3, 4, 5, 6, 7, 8, 9, 0}; // C++11中新的语法
delete[] ptr3; //在堆上申请的空间如果不释放就会造成内存泄漏
delete[] ptr4;
delete ptr1;
delete ptr2;
// 一定要匹配起来使用
// new--->delete
// new[]--->delete[]
// malloc/calloc/realloc--->free
// 如果不匹配起来使用,后果:可能会造成内存泄漏 或者 程序崩溃
malloc(size):只是从堆上申请了size个字节的空间,并不会对空间中内容进行初始化,即不会调用构造函数。
free(p):只负责将p指向的堆空间还给系统,并不会调用析构函数对空间中的内容进行清理,即,不会调用析构函数。
new:会申请空间,其次会调用构造函数对申请空间的内容进行初始化。
delete p:会释放空间,并且会对空间中的资源进行清理,会调用析构函数。(先调用析构函数将p指向的空间中的资源清理干净,然后释放对象的空间。)