new和delete,malloc和free

new和delete,malloc和free

new/delete,new[]/delete[]基本格式

int* p1 = new int; 
int* p2 = new int(3); //初始化为3
int* p3 = new int[3]; //动态建立数组p3[3];

delete p1;
delete p2;
delete p3[];

在C++中,把int,char,等内置类型的变量也看作对象,它们也是存在构造函数和析构函数的,只是通常对它们,系统调用默认的构造函数来初始化以及默认的析构。所以new int,new int(3)看起来和普通的定义好像没有什么区别。但对于自定义对象,此种方式在创建对象的同时,还会将对象初始化好;于是new/delete,new[]/delete[]方式管理内存相对于malloc/free的方式管理的优势就体现出来了,因为它们能保证对象一被创建出来便被初始化,出了作用域便被自动清理。

其实new表达式并不是直接开辟内存出来,而是通过调用operrator new 来获得内存,而operator new获得的内存实质上还是用malloc开辟出来的。这便证实了前面所述的:开空间出来还是要malloc

delete表达式也不是直接去释放内存

int* p1 = new int[10];
delete[]p1;

delete[]实际做的是:

  • 依次调用p1指向对象数组中的每个对象的析构函数,共10次
  • 调用operator delete[]函数,它再调用operator delete函数
  • 底层再用operator free去执行operator delete表达式,依次释放内存

小结 operator new/ operator delete:

  1. operator new/operator delete operator new[]/operator delete[] 和 malloc/free用法一样
  2. 他们只负责分配空间/释放空间,不会调用对象构造函数/析构函数来初始化/清理对象。
  3. 实际operator new和operator delete只是malloc和free的一层封装
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值