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