c++中new和delete怎么用_动态内存分配new与释放delete操作详解

new用于动态分配内存,delete用于释放;分配单个对象用new T和delete,数组用new T[]和delete[],需匹配使用以防未定义行为。

c++中new和delete怎么用_动态内存分配new与释放delete操作详解

在C++中,new 和 delete 是用于动态内存分配与释放的关键操作符。它们允许程序在运行时从堆(heap)上申请和归还内存,相比栈上的静态或自动变量,提供了更大的灵活性。

new 的基本用法

使用 new 可以在程序运行时动态创建单个对象或对象数组。它会返回指向所分配内存的指针。

● 动态分配单个变量:

例如,分配一个整数:

int* p = new int;

立即学习“C++免费学习笔记(深入)”;

也可以同时初始化:

int* p = new int(10); // 分配并初始化为10

● 动态分配数组:

分配一个包含5个整数的数组:

int* arr = new int[5];

可以配合初始化(C++11起支持):

int* arr = new int[5]{1, 2, 3, 4, 5};

● 分配自定义类型对象:

比如一个类对象:

MyClass* obj = new MyClass();

如果构造函数有参数:

MyClass* obj = new MyClass(arg1, arg2);

delete 的基本用法

使用 delete 释放由 new 分配的内存,防止内存泄漏。

● 释放单个对象:

对应 new T,使用 delete ptr:

delete p;

释放后建议将指针置空,避免悬空指针:

p = nullptr;

● 释放数组:

必须使用 delete[] 来释放由 new T[N] 分配的数组:

delete[] arr;

注意:不能混用 delete 和 delete[],否则行为未定义。

常见错误与注意事项

正确使用 new 和 delete 需要特别小心,以下是一些关键点:

● 匹配使用:new 对应 deletenew[] 对应 delete[]

● 避免重复释放:

同一指针不能多次 delete,会导致程序崩溃或未定义行为。

● 检查内存分配失败:

虽然现代系统中 new 失败会抛出 std::bad_alloc 异常,但若使用 nothrow 版本,则需检查返回值:

int* p = new(std::nothrow) int;

此时若分配失败,p 为 nullptr。

● 不要 delete 栈上变量:

如下写法是错误的:

int x; delete &x; ❌

实际应用示例

下面是一个完整的小例子:

#include 
using namespace std;

int main() {int num = new int(42);cout << num << endl;

int* arr = new int[3]{10, 20, 30};for (int i = 0; i < 3; ++i)    cout << arr[i] << " ";cout << endl;delete num;num = nullptr;delete[] arr;arr = nullptr;return 0;

}

基本上就这些。合理使用 new 和 delete 能提升程序灵活性,但也容易出错。现代C++更推荐使用智能指针(如 unique_ptr、shared_ptr)和容器(如 vector),让内存管理更安全。

以上就是c++++中new和delete怎么用_动态内存分配new与释放delete操作详解的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1478465.html

赞 (0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
c++中的std::deque容器怎么使用_c++ std::deque使用方法
上一篇 2025年12月19日 02:56:39
c++怎么实现一个简单的日志系统_c++日志系统实现方法
下一篇 2025年12月19日 02:56:51

相关推荐

发表回复

登录后才能评论
关注微信