【C++】内存管理

一、C\C++的内存分布

二、C++的内存管理方式 

C语言动态管理内存用:malloc、calloc、realloc函数开辟空间。free函数释放空间。

char* c = (char*)malloc(100);
free(c);
c = NULL;

C++用:new关键字开辟空间。delete关键字释放空间。

  int* a = new int(10);//开辟一个空间,赋值为10
  delete a;


  char* c = new char[10];//开辟10个连续的空间
  delete[] c;//用[]开辟的空间需要delete[]释放

注:*C++开辟的方式与C开辟的方式的区别

C++有类这个东西。

malloc等函数只会开辟空间,不会调用类里的构造函数。new关键字在开辟空间后会调用类里的构造函数。

free函数释放空间不会调用类的析构函数。delete关键字在释放空间前会调用类的析构函数。

三、new和delete的底层

在使用new时,new底层会调用operator new函数,同样的,delete会调用operator delete函数。

operator new在底层调用的也是mallooc或其他函数。如果开辟空间失败,并不返回空,而是抛出异常。我们可以捕获异常。

operator delete在底层调用free函数。如果释放失败,也会抛出异常。

四、定位new

定位new:在已经分配的空间中调用构造函数初始化对象。

基本语法:

new(pointer)Type(initializer)

pointer是指向已经分配的空间的指针。

initiallizer是构造函数的参数。

Type是数据类型。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值