news 2026/5/1 8:23:28

20. new关键字

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/28 6:55:06

4.6 显存和缓存

1.显存和缓存简介 2.显存和缓存的关系 3.显存和缓存为什么会影响性能 4.显存和缓存优化思路 1.显存和缓存简介 1).显存a.显存是gpu外部的专用大容量存储, 主要用于存放顶点, 纹理, 渲染目标(RT), 阴影贴图后处理缓冲b.特点- 容量大, 以GB为单位, 带宽高, 但是延迟大- GPU工…

作者头像 李华
网站建设 2026/4/28 22:45:55

python Uvicorn库,深度解析

从传统Flask开发转向现代异步Web架构时&#xff0c;理解Uvicorn是关键一步。它解决了传统同步服务器在高并发时的核心瓶颈。 1. 它是什么&#xff1f; Uvicorn是一个轻量级、高性能的ASGI服务器。ASGI是“异步服务器网关接口”的缩写&#xff0c;你可以把它理解为专门为异步通…

作者头像 李华
网站建设 2026/4/18 5:51:45

救命神器!AI论文平台 千笔写作工具 VS 知文AI,专为本科生量身打造!

随着人工智能技术的迅猛迭代与普及&#xff0c;AI辅助写作工具已逐步渗透到高校学术写作场景中&#xff0c;成为本科生完成毕业论文不可或缺的辅助手段。越来越多面临毕业论文压力的学生&#xff0c;开始依赖各类AI工具简化写作流程、提升创作效率。但与此同时&#xff0c;市场…

作者头像 李华
网站建设 2026/4/28 11:18:15

编写合同审核助手,上传合同文本,自动识别合同中的风险点,(如霸王条款,模糊条款),给出修改建议,生成合同审核报告,避免合同纠纷,适合职场人。

1. 实际应用场景描述 场景&#xff1a; 在职场中&#xff0c;HR、法务、商务人员经常需要审核各类合同&#xff08;劳动合同、采购合同、合作协议等&#xff09;。人工审核耗时长&#xff0c;且容易遗漏关键风险点&#xff0c;如&#xff1a; - 霸王条款&#xff08;单方面免责…

作者头像 李华
网站建设 2026/3/27 9:41:12

Python 多进程返回值处理

在 Python 中进行并行计算时,多进程是一种常用手段。然而,如何高效地获取子进程的返回值,常常成为初学者的困惑点。本文将系统介绍两种主流的多进程编程接口——concurrent.futures.ProcessPoolExecutor 和 multiprocessing.Pool,并对比它们在处理返回值方面的异同,帮助开…

作者头像 李华