1. delete、free和new、malloc的异同

1.1. new、malloc区别

区别点 new malloc
1.申请的内存所在位置 自由存储区(free store)上为对象动态分配内存空间 上动态分配内存。
2.返回类型安全性 返回标准类型指针。 返回void*
3.内存分配失败时的返回值 内存分配失败时,会抛出bac_alloc异常,它不会返回NULL; 分配内存失败时返回NULL。
4.是否需要指定内存大小 申请内存分配时无须指定内存块的大小,编译器会根据类型信息自行计算,
需要显式地指出所需内存的尺寸。
5.是否调用构造函数/析构函数 调用构造 不调用
6.对数组的处理,C++提供了new[]与delete[]来专门处理数组类型
7.new与malloc是否可以相互调用
8.是否可以被重载 new/delete可以重载 free/malloc是函数,可以写同名函数,重载函数。
9.能够直观地重新分配内存
10.客户处理内存分配不足

自由存储区:C++基于new操作符的一个抽象概念,凡是通过new操作符进行内存申请,该内存即为自由存储区。

堆:操作系统中的术语,是操作系统所维护的一块特殊内存,用于程序的内存动态分配,C语言使用malloc从堆上分配内存,使用free释放已分配的对应内存。

注意:

自由存储区是否是堆:需要看new的实现,自由存储区不仅可以是堆,还可以是静态存储区,这都看operator new在哪里为对象分配内存。

注意:

delete一般是不可以释放malloc的资源,free和new一样。
但对于简单类型单单释放是不会报错的,对于对象类型的话,可能会存在问题。

Copyright © ershouche-FE 2019 all right reserved,powered by Gitbook文件修订时间: 2022-02-27 22:59:28

results matching ""

    No results matching ""