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

相关推荐
2301_7736436212 小时前
ceph池
开发语言·ceph·python
两年半的个人练习生^_^12 小时前
JMM 进阶:彻底理解 CAS 实现原理
java·开发语言
wuminyu12 小时前
Java锁机制之park和unpark源码剖析
java·linux·c语言·jvm·c++
半个烧饼不加肉12 小时前
JS 底层探究-- 事件循环
开发语言·前端·javascript
皆圥忈12 小时前
文件描述符与重定向
linux
实心儿儿13 小时前
Linux —— 线程池(2)
linux
AI帮小忙13 小时前
主机安全排查
linux·服务器·安全
asdfg125896313 小时前
C 语言中产生伪随机数的标准做法
c语言·开发语言
玖玥拾13 小时前
C/C++ 基础笔记(十一)类的进阶
c语言·c++·设计模式·
KobeSacre13 小时前
JUC 概述
java·开发语言