【C++】动态内存管理和智能指针

本文探讨了C++中动态内存管理的区别,如new与malloc,以及为何需要智能指针来避免内存泄漏。详细介绍了智能指针的不同类型,如auto_ptr、scoped_ptr、shared_ptr和weak_ptr的工作原理及使用注意事项,强调了智能指针在解决内存管理问题上的重要性。
摘要由CSDN通过智能技术生成

C++动态内存管理的方式

malloc和new,free和delete

在C语言中,我们通常用malloc和free来动态的管理内存,其中malloc用来在堆上开辟空间,而free用来释放malloc或其他在堆上动态开辟内存的函数所开辟的空间。在C++中,我们用new/delete;new[]/delete[]来动态的管理内存,相比于C语言中的malloc和free,他们之间有什么差别呢?

首先,它们的调用方式不相同,其中malloc和free采用下面的方式来调用

 int* p=(int*)malloc(sizeof(int)*4);
 //使用malloc函数开辟4个int类型的空间

free(p);
p=NULL;
//释放上面malloc所开辟的空间

在C++中,new和new[]/delete[]和delete主要采用下面的调用方式:

    int* p=new int(4);       //开辟一个int类型的对象,初值为4
    delete p;               //释放上面所开辟的空间

    int* p1=new int[4];     //开辟4个int类型的空间,无初值
    delete[] p1;            //释放上面所开辟的空间

另外,它们之间更重要的差别是,new和delete,new[]和delete[]才开辟空间后和释放空间前还分别调用了所开辟类型的构造函数以及析构函数。如下图所示:

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值