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 分配单个对象时使用 deletenew[] 分配数组时使用 delete[],否则会导致未定义行为。

示例代码

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

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

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

相关推荐
wengqidaifeng41 分钟前
C++从菜鸟到强手:1.基础入门
开发语言·c++
hhb_61844 分钟前
PHP 8.x 核心特性与工程化开发实践指南
开发语言·php
geovindu2 小时前
go: Flyweight Pattern
开发语言·设计模式·golang·享元模式
xyq20243 小时前
TypeScript中的String类型详解
开发语言
爱学习的小囧8 小时前
ESXi 8.0 原生支持 NVMe 固态硬盘吗?VMD 配置详解教程
linux·运维·服务器·esxi·esxi8.0
坚持就完事了8 小时前
Linux中的变量
linux·运维·服务器
小糖学代码8 小时前
LLM系列:1.python入门:15.JSON 数据处理与操作
开发语言·python·json·aigc
handler019 小时前
从源码到二进制:深度拆解 Linux 下 C 程序的编译与链接全流程
linux·c语言·开发语言·c++·笔记·学习
Cat_Rocky9 小时前
利用Packet Tracer网络实验
linux·运维·服务器
小白学大数据9 小时前
现代Python爬虫开发范式:基于Asyncio的高可用架构实战
开发语言·爬虫·python·架构