20. new关键字

📅 发布时间:2026/7/10 10:36:41 👁️ 浏览次数:
20. new关键字
1.new 关键字的核心作用2.new的常见用法3.new vs malloc1.new 关键字new是c的动态内存分配运算符,用于在程序运行时从堆内存区域分配指定大小的内存空间 a.对于基本数据类型(int,double)仅分配内存 b.对于自定义结构体/结构体对象,会自动调用构造函数初始化对象 c.最终返回指向该内存空间的指针2.new的常见用法1).为基本数据类型分配内存#include iostreamusingnamespacestd;intmain(){// 1. 分配单个int类型内存未初始化int*p1newint;*p110;// 手动赋值cout*p1endl;// 输出10// 2. 分配内存并直接初始化int*p2newint(20);// 括号内是初始化值cout*p2endl;// 输出20// 必须用delete释放内存否则会内存泄漏deletep1;deletep2;p1nullptr;// 建议置空避免野指针p2nullptr;return0;}2).为自定义类/结构体分配内存(分配内存)#include iostream#include stringusingnamespacestd;classPerson{public:// 构造函数Person(stringname,intage):m_name(name),m_age(age){coutPerson构造函数被调用endl;}~Person(){coutPerson析构函数被调用endl;}voidshowInfo(){cout姓名m_name年龄m_ageendl;}private:stringm_name;intm_age;};intmain(){// 分配Person对象内存同时调用构造函数初始化Person*pnewPerson(张三,20);p-showInfo();// 输出姓名张三年龄20// delete会先调用析构函数再释放内存deletep;pnullptr;return0;}3).为数组分配内存#include iostreamusingnamespacestd;intmain(){// 分配长度为5的int数组未初始化int*arrnewint[5];// 给数组赋值for(inti0;i5;i){arr[i]i1;coutarr[i] ;// 输出1 2 3 4 5}coutendl;// 分配数组并初始化C11及以上支持int*arr2newint[3]{10,20,30};for(inti0;i3;i){coutarr2[i] ;// 输出10 20 30}coutendl;// 释放数组必须用delete[]不能用deletedelete[]arr;delete[]arr2;arrnullptr;arr2nullptr;return0;}4).避免new分配失败的异常(nothrow版本)默认情况下,若new分配内存失败(如堆内存不足),会抛出std::bad_alloc异常;如果不想抛 异常,可使用nothrow版本#include iostream#include new// 必须包含此头文件usingnamespacestd;intmain(){// nothrow版本分配失败返回nullptr不抛异常int*pnew(nothrow)int[1000000000];// 超大数组模拟分配失败if(pnullptr){cout内存分配失败endl;}else{delete[]p;}return0;}3.new vs malloc