
前言

图示:

图示:

PS:C的内存管理有malloc/calloc/realloc/free(可见博主C专栏:动态内存管理)
引入:C语言内存管理方式在C++中可以继续使用,但有些地方就无能为力,而且使用起来比较麻烦,因此C++又提出了自己的内存管理方式:通过new和delete操作符进行动态内存管理。(一般C与C++内存管理不混用)
注意:申请和释放单个元素的空间,使用new和delete操作符,申请和释放连续的空间,使用 new[]和delete[],要匹配起来使用。(如果new后接free,无论是否是对同一块空间的操作,都容易报错)
代码演示:
//报错
int* p3 = (int*)malloc(sizeof(int)); // C
int* p4 = new int;
free(p4); 对开辟同一块空间操作,不匹配
delete p3;
//报错
int* p3 = (int*)malloc(sizeof(int)); // C
int* p4 = new int;
free(p3); 对开辟不同一块空间操作,不匹配
delete p4;使用场景:
代码演示:
void Test()
{
// 动态申请一个int类型的空间
int* ptr4 = new int;
// 动态申请一个int类型的空间并初始化为10
int* ptr5 = new int(10);
// 动态申请10个int类型的空间
int* ptr6 = new int[10];
// 动态申请10个int类型的空间,并初始化
int* ptr7 = new int[10]{1,3,4};
delete ptr4;
delete ptr5;
delete[] ptr6;
}使用场景:有一个自定义类型A,他的初始化列表需要传入两个参数
代码演示:
void test()
{
A* p1 = new A(1,1);
delete p2;
//错误写法:不完全初始化 A* p2 = new A[4]{ A(1,1),A(2,2),A(3,3)};
A* p2 = new A[4]{ A(1,1),A(2,2),A(3,3),A(4,4) };
delete[] p2;
}new/delete 和 malloc/free根本区别:
实例分析:(顺序)
图演示:

代码演示:
try
{
do
{
//p1 = (int*)malloc(1024 * 1024);
p1 = new int[1024 * 1024];
cout << p1 << endl;
} while (p1);
}
catch (const exception& e)
{
cout << e.what() << endl;
}