C++动态内存管理 new/delete

C语言内存管理方式在C++中有局限,C++提出通过new和delete操作符进行动态内存管理。介绍了单个类型空间和一段连续空间的申请方式,强调使用时要匹配,还对比了malloc、free与new、delete在初始化和资源清理上的差异。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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指向的空间中的资源清理干净,然后释放对象的空间。)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值