C++ new和delete用法详解

new和delete关键字基本用法

new 关键字在 C++ 中用于动态内存分配,允许在运行时按需分配堆内存。

分配单个对象:

cpp 复制代码
int* ptr = new int; // 分配一个 int 类型的内存空间,
//在C语言中int *p = (int *)malloc(sizeof(int));  

分配对象数组:

cpp 复制代码
int* arr = new int[10]; // 分配一个包含 10 个 int 的数组
//在C语言中int *arr = (int *)malloc(sizeof(int)*10);   

初始化对象:

cpp 复制代码
MyClass* obj = new MyClass(arg1, arg2); // 调用构造函数初始化  

内存释放

动态分配的内存必须手动释放,否则会导致内存泄漏。

释放单个对象:

cpp 复制代码
delete ptr; // 释放 ptr 指向的对象  

释放数组:

cpp 复制代码
delete[] arr; // 释放 arr 指向的数组  

注意事项

  • 异常安全 :new 在内存分配失败时会抛出 std::bad_alloc 异常,除非使用 nothrow 版本。
  • 内存泄漏 :未正确释放 new 分配的内存会导致内存泄漏。
  • 正确匹配 :new 分配单个对象时使用 delete,new[] 分配数组时使用 delete[],否则会导致未定义行为。

示例代码

cpp 复制代码
int* ptr = new int; // 动态分配一个 int  
int* arr = new int[10]; // 动态分配一个 int 数组  
MyClass* obj = new MyClass(arg1, arg2); // 动态构造对象  

delete ptr; // 释放单个对象  
delete[] arr; // 释放数组  

确保每次 new 都有对应的 delete 或 delete[],以正确管理内存。

相关推荐
Soneswy2 分钟前
Linux系统篇--用户切换与文件权限
linux·服务器
Ruiery5 分钟前
Linux 6.6内核内存管理深度解析(三·补):页表项(PTE)结构与地址翻译
linux·运维·服务器
沐晓时光7 分钟前
C语言入门,深入理解指针(6)
c语言·开发语言
五块钱的方便面9 分钟前
ubuntu下networkmanager不让管理解决办法
linux·运维·ubuntu
略略略咯咯11 分钟前
33333
开发语言·windows·python
垆边人似月.14 分钟前
第三篇:函数、文件与异常处理 / Functions, Files & Exception Handling
开发语言·python
云和数据.ChenGuang16 分钟前
项目打开后没有主类
开发语言·人工智能·langchain·1024程序员节
鬼手点金19 分钟前
缓存作为架构约束
开发语言·前端·人工智能·python·microsoft·缓存·架构
叼烟扛炮23 分钟前
Linux 学习笔记(三十四):线程同步——条件变量与生产消费者模型
linux·运维·服务器·笔记·学习·1024程序员节
SEO_juper23 分钟前
Node.js 页面主题聚焦度检测:title 和正文各说各的,AI 也读不懂
开发语言·人工智能·node.js·seo·外贸独立站