当前位置: 首页 > news >正文

20. new关键字

1.new 关键字的核心作用

2.new的常见用法

3.new vs malloc


1.new 关键字

new是c++的动态内存分配运算符,用于在程序运行时从堆内存区域分配指定大小的内存空间 a.对于基本数据类型(int,double)仅分配内存 b.对于自定义结构体/结构体对象,会自动调用构造函数初始化对象 c.最终返回指向该内存空间的指针

2.new的常见用法

1).为基本数据类型分配内存
#include <iostream>usingnamespacestd;intmain(){// 1. 分配单个int类型内存(未初始化)int*p1=newint;*p1=10;// 手动赋值cout<<*p1<<endl;// 输出:10// 2. 分配内存并直接初始化int*p2=newint(20);// 括号内是初始化值cout<<*p2<<endl;// 输出:20// 必须用delete释放内存,否则会内存泄漏deletep1;deletep2;p1=nullptr;// 建议置空,避免野指针p2=nullptr;return0;}


2).为自定义类/结构体分配内存(分配内存)
#include <iostream>#include <string>usingnamespacestd;classPerson{public:// 构造函数Person(stringname,intage):m_name(name),m_age(age){cout<<"Person构造函数被调用"<<endl;}~Person(){cout<<"Person析构函数被调用"<<endl;}voidshowInfo(){cout<<"姓名:"<<m_name<<",年龄:"<<m_age<<endl;}private:stringm_name;intm_age;};intmain(){// 分配Person对象内存,同时调用构造函数初始化Person*p=newPerson("张三",20);p->showInfo();// 输出:姓名:张三,年龄:20// delete会先调用析构函数,再释放内存deletep;p=nullptr;return0;}


3).为数组分配内存
#include <iostream>usingnamespacestd;intmain(){// 分配长度为5的int数组(未初始化)int*arr=newint[5];// 给数组赋值for(inti=0;i<5;i++){arr[i]=i+1;cout<<arr[i]<<" ";// 输出:1 2 3 4 5}cout<<endl;// 分配数组并初始化(C++11及以上支持)int*arr2=newint[3]{10,20,30};for(inti=0;i<3;i++){cout<<arr2[i]<<" ";// 输出:10 20 30}cout<<endl;// 释放数组必须用delete[],不能用delete!delete[]arr;delete[]arr2;arr=nullptr;arr2=nullptr;return0;}


4).避免new分配失败的异常(nothrow版本)默认情况下,new分配内存失败(如堆内存不足),会抛出std::bad_alloc异常;如果不想抛 异常,可使用nothrow版本
#include <iostream>#include <new>// 必须包含此头文件usingnamespacestd;intmain(){// nothrow版本:分配失败返回nullptr,不抛异常int*p=new(nothrow)int[1000000000];// 超大数组,模拟分配失败if(p==nullptr){cout<<"内存分配失败!"<<endl;}else{delete[]p;}return0;}

3.new vs malloc

http://www.jsqmd.com/news/358771/

相关文章:

  • Flutter for OpenHarmony:绿氧 - 基于Flutter的呼吸训练应用开发实践与身心交互设计
  • 2026年2月ppt免费生成平台权威推荐,智能生成效率与效果深度解析! - 品牌鉴赏师
  • Flutter for OpenHarmony:日迹 - 用 Flutter 打造极简习惯打卡日历的实现与设计哲学
  • Docker Desktop
  • Delphi接收从文件管理器拖放过来的文件名
  • python Uvicorn库,深度解析
  • Calico API:Kubernetes容器网络与安全的核心API定义库
  • 北京上门回收老旧古书店铺科普推荐 2家正规机构,丰宝斋支持全国上门变现 - 品牌排行榜单
  • 2026-02-08 大模型集成小模型技术研究综述
  • Claude Code初体验记录
  • 杜绝压价乱象,京城亚南酒业规范北京五粮液老酒回收市场 - 品牌排行榜单
  • 导师又让重写?8个降AI率平台深度测评与推荐
  • python asyncpg库,深度解析
  • 小程序毕设项目:基于springboot+小程序的社区GO团购活动小程序的设计与实现(源码+文档,讲解、调试运行,定制等)
  • 小程序计算机毕设之基于SpringBoot的社区线上团购系统基于springboot+小程序的社区GO团购活动小程序的设计与实现(完整前后端代码+说明文档+LW,调试定制等)
  • Python Pydantic库深度解析
  • 实测才敢推!专科生专属降AIGC网站 —— 千笔
  • python Redis库,深度解析
  • python SQLAlchemy 库,深度解析
  • 高频方波电压注入零低速IPMSM无感控制算法仿真,在估计的d轴注入高频方波电压来估计转子位置
  • 【计算机毕业设计案例】基于springboot+小程序的社区GO团购活动小程序的设计与实现商品发布、拼团下单、统一配送、社区自提(程序+文档+讲解+定制)
  • 别再瞎找了!10个降AI率网站深度测评与推荐,研究生必备
  • 计算机毕业设计springboot艺术教培机构学员信息管理系统 基于SpringBoot的艺术培训中心学员综合管理平台 SpringBoot框架下的艺术教育学校学员教务管理系统
  • 安卓证书在线生成_免费一键制作apk打包 Android一键制作工具
  • 被滑动窗口折磨过的同学请举手!最近终于搞到个能打的MATLAB神器,三行代码就能把原始数据切成训练样本,今天必须给大家安利这个真香函数
  • Unreal Engine AI 技术栈指南(2026)
  • python passlib库,深度解析
  • python python-multipart库,深度解析
  • C++游戏开发之旅 9
  • 【毕业设计】基于springboot+小程序的社区GO团购活动小程序的设计与实现(源码+文档+远程调试,全bao定制等)