C++ new出来的内存,如何释放?

C++ new出来的内存,如何释放?

delete

delete[]

在C++中,当你使用new操作符动态分配内存时,你需要使用delete(对于单个对象)或delete[](对于对象数组)来释放这块内存。这是为了避免内存泄漏,即分配的内存没有被适当释放,导致程序占用的内存持续增加。

对于单个对象

如果你使用new分配了一个单个对象的内存,你应该使用delete来释放它。例如:

int* ptr = new int(10); // 分配一个int类型的内存,并初始化为10
// ... 使用ptr做一些操作
delete ptr; // 释放ptr所指向的内存
ptr = nullptr; // 设置为nullptr,避免成为悬空指针

对于对象数组

如果你使用new[]分配了一个对象数组的内存,你应该使用delete[]来释放它。例如:

int* arr = new int[10]; // 分配一个包含10个int的数组
// ... 使用arr做一些操作
delete[] arr; // 释放arr所指向的内存
arr = nullptr; // 设置为nullptr,避免成为悬空指针

注意事项

  1. 匹配使用:确保你使用new分配的内存用delete释放,用new[]分配的内存用delete[]释放。不匹配使用会导致未定义行为,通常表现为程序崩溃或内存损坏。

  2. 避免重复释放:一旦你释放了内存,就不要再访问那块内存了,否则会导致未定义行为。将指针设置为nullptr是一个好习惯,可以防止成为悬空指针。

  3. 异常安全:在可能抛出异常的代码中,确保在抛出异常之前释放所有分配的内存。这通常通过RAII(Resource Acquisition Is Initialization)技术或使用智能指针(如std::unique_ptrstd::shared_ptr)来自动管理内存来实现。

  4. 智能指针:在C++11及以后的版本中,推荐使用智能指针(如std::unique_ptrstd::shared_ptr)来自动管理动态分配的内存。这样可以减少内存泄漏的风险,并使代码更简洁、更安全。

例如,使用std::unique_ptr管理单个对象的内存:

#include <memory>

std::unique_ptr<int> ptr(new int(10));
// ... 使用ptr做一些操作
// 不需要手动释放内存,unique_ptr的析构函数会自动处理
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值