c++动态内存管理

一、c++中动态内存管理方法

      (1)动态内存分配new
      c++中使用new动态分配内存,其用法和malloc相似

Type* a = new Type(x);

      new运算符在使用上比malloc更加便捷,并且与malloc相比,它不光能动态分配内存,而且会对所分配的内存进行初始化,new分配连续空间方法如下:

Type a[] = new Type[x];

      上述代码意思是分配x个Type大小的空间。
      (2)释放内存delete
      delete完成的工作也和free差不多,用于释放new分配的空间,需要注意的是,其释放单个空间和free基本相同,delete a,但是释放连续空间时需要加上方括号:

delete []a;

      如果不加方括号对于普通类型来说就相当于调用free,没什么大碍,只是不建议这么做,但是对于自定义类型,不加方括号就是只释放一个单位的空间,会造成内存泄漏。

二、new-malloc,delete-free的对比

      从根本意义上来说,newdelete是运算符,而mallocfree是库函数。
      mallocfree只是负责内存的分配和释放,而newdelete不光是进行内存分配与释放,而且会对所分配内存初始化或对所释放内存析构,也就是说,类型为内置类型时,new会调用构造函数,delete会调用析构函数,另外,newdelete会进行安全检查,分配失败或者释放内存为空会抛出异常。
      newdelete还是用mallocfree来实现的,只不过调用了构造函数和析构函数以及一些其他必要的东西。new和delete在类型为自定义类型时会调用operator newoperator delete,其底层实现还是会调用malloc和free。

三、定位new的使用

      有时候需要对已经分配的内存进行重新定义或者说初始化工作,这时候就要用到定位new,其用法如下:

new(指针)Type(初始化列表)

      乍一看这种写法有点奇怪,但是如果没有指出地址,也就是说没有new后边那个括号,这个语句就和普通的new的用法一模一样,所以可以说这种用法只是在调用new的一个重载版本而已,我们也可以自己实现new的重载。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值