(一)分配内存 new
-
很多时候,我们无法提前预知需要多少内存来存储某个定义变量中的数据,所需内存的大小需要在运行时才能确定;这时就要用到内存分配。动态分配内存存放在堆区中。
-
单个空间的分配
格式: 数据类型 * 指针名 = new 数据类型
-
连续空间分配
格式:数据类型 * 指针名 = new 数据类型[数量] 如: int *p = new int[5]
(二)内存回收 delete
-
单个空间的回收
delete 指针名
-
连续的空间回收
delete []指针名 []内什么都不写 表示释放从指针指向空间开始的连续的空间
(三)malloc 和 new 的区别
在 C++ 中支持 malloc / free 但是为什么我们在 C++ 中一般使用 new delete呢?
-
new/delete 是 C++ 的关键字,malloc/free 是库函数。
-
new 在分配空间的同时可以进行初始化,malloc 不可以。
-
new 分配的空间如果没有初始化,默认会初始化成 0;而 malloc 分配的空间如果没有初始化,里面都是随机值,需要自己手动调用 memset 或者 bzero 函数来清 0。
-
new 是根据类型分配的空间,而 malloc 是根据字节数分配空间的,需要自己调用 sizeof() 计算。
-
new 是要什么类型,返回的就是什么类型的指针;而 malloc 返回的都是 void*,需要自己强转成需要的类型。
-
new 在分配类对象空间的时候,会调用类的构造函数,malloc 不会。
-
delete 在释放类对象空间的时候,会调用类的析构函数,free 不会。