new和malloc区别?delete和free区别?
malloc和free是C语言的库函数
new和delete叫做运算符
malloc是否开辟成功是通过返回值和空指针比对判断.和new开辟失败会抛出异常.bad_alloc
new 不仅可以做内存开辟,还可以做内存初始化操作.
点击查看代码- int *p =(int *)malloc(sizeof(int));
- // malloc按照字节开辟空间,返回的是void *,需要自己强转到指定类型.
- //malloc只负责空间开辟,不负责初始化
- if(p==nullptr){
- return -1;
- }
- *p=20;
- //释放malloc申请的空间地址,只需要将p地址传入即可
- free(p);
- //new 成功与否通过异常捕捉实现
- try{
- int *p1=new int(20);
- delete p1;
- }catch(const bad_alloc &e){
- }
- //C语言开辟数组空间
- int *arr1=(int *)malloc(sizeof(int) * 20);
- if(arr1==nullptr){
- return -1;
- }
- free(arr1);//C语言无论是释放单个元素还是数组 都是传入地址即可.
- //C++ 开辟数组空间
- int *arr2 =new int[20]; //堆上只负责开辟空间不会做初始化
- int *arr3 =new int[20](); //堆上开辟空间,同时负责初始化为0
- int *arr4=new int[20](40);//堆上开辟空间,并且初始化值40
- //注意new 成功还是失败不要通过和nullptr对比方式,而通过捕获异常方式来判断
- delete[]arr2;
- //注意delete在释放单个元素的时候不需要[] 而在释放数组空间的时候要[]
复制代码 C++中new 的方式有哪几种?
点击查看代码- int *p=new int(20);
- int *p2=new (nothrow) int;
- cont int *p3=new const int(10);//在堆空间开辟一个常量
- //定位new
- int data=100;
- int *p4=new (&data) int(200);//在指定的位置 开辟空间,放入200值
复制代码 免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |