【C++】new操作符的使用说明

在C++中,new 操作符用于在堆上动态分配内存,它比静态或栈内存分配更灵活。使用 new 分配的内存需要用 delete 来释放,以防止内存泄漏。以下是 new 的常见使用方法:

1. 基本用法:分配单个变量

int* p = new int;      // 动态分配一个整型变量
*p = 5;                // 赋值
delete p;              // 释放内存

上面代码中,new int 在堆上分配了一个 int 变量,并返回该变量的指针。用完后,使用 delete p 来释放内存。

2. 分配并初始化变量

int* p = new int(10);  // 分配一个 int,并初始化为 10
double* d = new double(3.14);  // 分配一个 double,并初始化为 3.14
delete p;
delete d;

使用括号可以在分配内存的同时初始化变量。

3. 分配数组

int* arr = new int[5]; // 分配一个包含5个int元素的数组
for (int i = 0; i < 5; i++) {
    arr[i] = i * 2;    // 初始化数组
}
delete[] arr;          // 用delete[]释放数组内存

当分配数组时,必须用 delete[] 来释放数组的内存,否则会导致内存泄漏。

4. 分配自定义对象

class Student {
public:
    Student() { }
    void display() { cout << "Hello, Student!" << endl; }
};

Student* s = new Student;  // 分配一个 Student 对象
s->display();
delete s;                  // 释放内存

此代码中使用 new 为类的对象分配内存,释放时使用 delete

5. 分配对象数组

Student* students = new Student[3];  // 分配一个包含3个Student对象的数组
delete[] students;                   // 释放数组

6. 使用new分配二维数组

二维数组可以通过循环分配多个一维数组实现:

int** matrix = new int*[3];          // 分配一个指针数组
for (int i = 0; i < 3; i++) {
    matrix[i] = new int[4];          // 为每个指针分配一个包含4个int的数组
}

// 释放二维数组内存
for (int i = 0; i < 3; i++) {
    delete[] matrix[i];              // 释放每一行
}
delete[] matrix;                     // 释放指针数组

7. new的异常处理

new 在分配失败时会抛出 std::bad_alloc 异常,可以使用异常处理机制捕获错误:

try {
    int* p = new int[1000000000];    // 尝试分配大量内存
} catch (const std::bad_alloc& e) {
    cout << "Memory allocation failed: " << e.what() << endl;
}

总结

  • new 分配单个变量或对象时使用 delete 释放;
  • new 分配数组时使用 delete[] 释放;
  • 异常处理可以确保内存分配失败时程序的健壮性。

注意

不释放动态分配的内存会导致内存泄漏,这会增加程序的内存占用、影响性能、增加调试难度,甚至最终导致程序崩溃。为避免内存泄漏,建议:

  • 使用 delete 或 delete[] 释放内存;
  • 考虑使用智能指针来自动管理内存;
  • 使用内存检测工具来帮助查找问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值