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

相关推荐
光电的一只菜鸡5 小时前
ubuntu之坑(二十)——VMware虚拟机系统无法正常进入如何处理
linux·运维·ubuntu
「QT(C++)开发工程师」6 小时前
C++ 11 常用for循环
开发语言·c++
我还记得那天6 小时前
0 初识C++
开发语言·c++
FfHUCisI7 小时前
Go 编译过程全景
开发语言·后端·golang
FfHUCisI7 小时前
Golang 语法分析与 AST:Parser 与 go/ast
开发语言·后端·golang
你住过的屋檐7 小时前
【Nginx】linux上安装nginx
linux·运维·nginx
宵时待雨7 小时前
linux笔记归纳17:传输层协议UDP
linux·笔记·udp
lemon_sjdk8 小时前
ObjectProperty
java·开发语言·算法
大模型码小白8 小时前
Spring AI Tool 实现自然语言操作 MySQL 数据库详解
服务器·开发语言·数据库·人工智能·python·mysql·spring