首页 > 编程语言 ><六>理解C++ new delete

<六>理解C++ new delete

时间:2022-11-02 09:55:06浏览次数:43  
标签:malloc 20 int C++ new 开辟 delete

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值

标签:malloc,20,int,C++,new,开辟,delete
From: https://www.cnblogs.com/erichome/p/16845018.html

相关文章

  • new Vue的时候到底做了什么
    Vue加载流程1.初始化的第一阶段是Vue实例也就是vm对象创建前后:首先Vue进行生命周期,事件初始化发生在beforeCreate生命周期函数前,然后进行数据监测和数据代理的初始化,也就......
  • C++的前置声明
    C++的前置声明C++前置声明,这玩意看起是不是超级简单?我们来看几个问题:模板怎么前置声明typedef怎么前置声明模板的typedef怎么前置声明是不是还是比较头疼的......
  • QML实例化C++的类
    [网页](https://blog.csdn.net/baidu_33850454/article/details/81907857?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522166731863916782429784725%2522%252C......
  • 如何解决何避免多个C/C++动态库函数同名冲突
    前言现在的开发节奏越来越快,有大量现成的库来方便我们的开发者来使用,避免重复造轮子,而且有很多有生命力的开源社区。当然在使用过程中,你可能为这样的场景而头痛:你的项目中用......
  • c++ new数组同时初始化
    今天的小目标:先来一个亿,咳咳咳.实现:new一个数组,成员全部用1初始化:int*p=newint[10](1);应该是编译不过的哈!.再来:int*p=newint[10];for(inti=0;......
  • c++从入门到精通——命名空间与作用域
    1C++概述C++两大编程思想面向对象泛型编程1.2移植性和标准ANSI在1998制定出C++第一套标准2c++初识引入头文件#include标准输入输出流使用标准命名空间using......
  • c++从入门到精通——C++对于C语言的增强和拓展
    全局变量检测增强inta;inta=10;C下可以,C++重定义C语言之下,全局变量定义,不会出错。#include<stdio.h>inta;inta=10;intmain(){printf("helloworld!");retu......
  • C++从入门到精通——引用及其注意事项
    引用基本语法:类型&别名=原名#define_CRT_SECURE_NO_WARNINGS#include<iostream>#include<string>usingnamespacestd;//引用基本语法:类型&别名=原名voidtest01......
  • c++从入门到精通——const分配内存模型
    const分配内存模型对const变量取地址,分配临时内存#define_CRT_SECURE_NO_WARNINGS#include<iostream>usingnamespacestd;voidtest(){constinta=10;int*p=(i......
  • c++从入门到精通——宏定义缺陷以及函数重载
    必须要加括号保证运算完整#define_CRT_SECURE_NO_WARNINGS#include<iostream>usingnamespacestd;#include<string>#defineMYADD(x,y)((x)+(y))//必须要加括号保证运......