C++ new和delete用法详解
new和delete关键字基本用法
new关键字在 C++ 中用于动态内存分配,允许在运行时按需分配堆内存。
分配单个对象:
int*ptr=newint;// 分配一个 int 类型的内存空间,//在C语言中int *p = (int *)malloc(sizeof(int));分配对象数组:
int*arr=newint[10];// 分配一个包含 10 个 int 的数组//在C语言中int *arr = (int *)malloc(sizeof(int)*10);初始化对象:
MyClass*obj=newMyClass(arg1,arg2);// 调用构造函数初始化内存释放
动态分配的内存必须手动释放,否则会导致内存泄漏。
释放单个对象:
deleteptr;// 释放 ptr 指向的对象释放数组:
delete[]arr;// 释放 arr 指向的数组注意事项
- 异常安全:
new在内存分配失败时会抛出std::bad_alloc异常,除非使用nothrow版本。 - 内存泄漏:未正确释放
new分配的内存会导致内存泄漏。 - 正确匹配:
new分配单个对象时使用delete,new[]分配数组时使用delete[],否则会导致未定义行为。
示例代码
int*ptr=newint;// 动态分配一个 intint*arr=newint[10];// 动态分配一个 int 数组MyClass*obj=newMyClass(arg1,arg2);// 动态构造对象deleteptr;// 释放单个对象delete[]arr;// 释放数组确保每次new都有对应的delete或delete[],以正确管理内存。
