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[],以正确管理内存。

相关推荐
阳光九叶草LXGZXJ4 小时前
达梦数据库-报错-15-列【XXX】长度超出定义
linux·运维·数据库·sql·学习
奔跑的大白啊5 小时前
多容器共享目录权限踩坑记
linux·ubuntu·共享目录·linux权限·docker 容器化部署
2601_962885726 小时前
如何用 Python 自动识别股票的支撑位与压力位?
开发语言·python
爱吃奥利奥_wen6 小时前
面向对象三板斧:封装、继承、多态,到底在“装“什么、“承“什么、“变“什么?
开发语言·经验分享·c#
All for pursuit.6 小时前
【位运算-1】338.比特位计数
数据结构·c++·算法·leetcode
我可能是个假开发6 小时前
FTP Unicode 文件名导致 `550` 的问题分析与解决方案
java·开发语言·spring
小师兄吃牛肉7 小时前
C语言中的nullptr有必要吗
c语言·c++·算法
WL学习笔记7 小时前
日期类(C++)
开发语言·c++·日期类实现
Android系统攻城狮8 小时前
Linux Gstreamer深度解析之gst_audio_encoder_set_frame_max调用流程与实战(六十一)
android·linux·运维·音视频·gstreamer音视频·音视频进阶·gstreamer音视频进阶
谢亮_vipxieliang8 小时前
Go map与结构体的正确使用
开发语言·golang·哈希算法