C++中new和delete运算符

程序运行时,计算机的内存被分为4个区:程序代码区、全局数据区、堆和栈。其中,堆可由用户分配和释放。在C++中,`new`和`delete`是两个非常重要的运算符,用于动态内存管理。它们在堆(heap)上分配和释放内存。

`new` 运算符

`new`运算符用于在堆上分配内存。它返回一个指向新分配内存的指针。`new`运算符不仅分配内存,还会调用对象的构造函数来初始化内存区域。

int* p = new int;  // 分配内存来存储一个int,并返回指向它的指针


还可以使用`new`来创建数组和类的对象。

int* arr = new int[10];  // 分配内存来存储10个int,并返回指向第一个元素的指针
MyClass* obj = new MyClass();  // 分配内存来存储一个MyClass对象,并调用其构造函数
```


 `delete` 运算符

`delete`运算符用于释放由`new`运算符分配的内存。当使用`new`在堆上创建对象或数组后,一旦你完成了对这些内存的使用,就应该使用`delete`来释放这些内存,以防止内存泄漏。

delete p;  // 释放p指向的内存
delete[] arr;  // 释放arr指向的数组内存
delete obj;  // 释放obj指向的对象内存,并调用其析构函数

注意事项

1. 使用`new`创建的任何对象或数组都必须使用`delete`或`delete[]`来释放。
2. 如果忘记释放内存,会导致内存泄漏,这可能会使程序运行缓慢,甚至崩溃。
3. 多次释放同一块内存也是错误的。
4. 使用`new`创建的对象或数组时,务必注意其生命周期,避免在对象或数组还在使用时就将其删除。
5. 使用`new`和`delete`时要特别小心,确保在程序的合适位置正确地分配和释放内存。如果不这样做,可能会导致难以调试的内存问题。

C++11及以后的版本引入了智能指针(如`std::unique_ptr`和`std::shared_ptr`)来更安全地管理动态内存,这些智能指针可以自动释放内存,从而避免了手动释放内存的问题。

  • 13
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值