#include <iostream> using namespace std; // C中开辟空间的方式 所有的返回值 都是 void * /// int * p = (int*)malloc(sizeof (int)) /// malloc 在堆上开辟空间并没有进行初始化 /// /// int* pa = (int*)calloc(1,sizeof (int)); /// calloc 在堆上开辟空间是有初始化的 /// 在原来的基础上 pa 再次开辟 10 个空间 /// /// int *pa1 = (int*)realloc(pa,sizeof(int)*10); /// 原来空间的数据 拷贝一份 (pa) /// realloc 在堆上开辟空间是有初始化的 /// 释放空间 /// free(p) /// free(pa) /// free(pa1) /// 同一块堆区空间被多次释放会造成 doublefree 的现象,程序会异常终止 /// // C++中开辟空间的方式 /// C++中提供了关键字 new 来动态开辟空间 ,为了释放空间 提供了关键字delete 来释放空间 /// 堆上的空间手动申请,手动释放,不然就是内存泄露 /// 使用 new + 类型 [N] 动态开辟 N 个类型的空间 /// 如果是连续开辟空间要释放使用 delete [] 进行释放 /// 对于内置类型而言 new 相当于是 malloc delete 相当于是 free /// 内置类型和自定义类型 /// 如果是自定义类型 new 代表两种含义,1. 开辟空间 2. 调用类中的构造函数进行初始化 /// delete 代表2中含义:调用类中的析构函数,释放空间 /// /// new 和 malloc 的联系 /// new 的底层就是使用 malloc 实现的 /// malloc 如果申请空间失败返回 Null /// new 如果申请空间失败抛出异常 bad_alloc() /// new 是按照类型开辟空间的 , 而 malloc 是按字节为单位开辟空间的 /// 对自定义的类型来说,new 不仅开辟空间 还会调用自定义类中的构造函数 /// delete 不经释放空间 还会先调用自定义类中的析构函数 int main() { // new 开辟空间的方式是使用new按照类型直接开辟的空间 // 同时,在内置类型的后面加上 () 表示编译器在括号取值初始化内置类型所开辟的内存中的值 int *p = new int(); // 动态连续开辟空间 int* pb = new int[1024]; // 连续开辟空间并初始化 int* pc = new int[1024]{1,2,3}; // 开辟空间并赋值 C++11的新语法 // 使用 delete 释放已经开辟的空间 delete p; delete [] pb; delete [] pc; cout << "Hello World!" << endl; return 0; }
标签:malloc,int,C++,空间,new,开辟,delete From: https://www.cnblogs.com/zhulongxu/p/18049361