new和delete用于C++中动态分配和释放堆内存,new分配内存并调用构造函数,delete释放内存并调用析构函数;分配单个对象用new/delete,数组用new[]/delete[],必须匹配使用以防未定义行为;现代C++推荐使用std::unique_ptr、std::shared_ptr和std::vector等RAII机制自动管理内存,避免泄漏和重复释放等问题。

在C++中,new 和 delete 是用于动态内存分配与释放的关键操作符。它们让程序员能够在程序运行时从堆(heap)上申请和归还内存,相比栈上的静态或自动变量,提供了更大的灵活性。
使用 new 可以在堆上分配内存,并返回指向该内存的指针。
• 分配单个对象:int* p = new int; // 分配一个int大小的内存
*p = 10;
• 初始化同时赋值:
int* p = new int(25); // 分配并初始化为25
立即学习“C++免费学习笔记(深入)”;
• 分配数组:
int* arr = new int[10]; // 分配10个int的数组
注意:new 不仅分配内存,还会调用构造函数(对于类类型),这是它与 malloc 的重要区别。
使用 delete 释放由 new 分配的内存,防止内存泄漏。
• 释放单个对象:delete p; // 释放单个对象,调用析构函数(如适用)
• 释放数组:
delete[] arr; // 必须使用 delete[] 释放数组
如果用错(比如对数组用 delete 而非 delete[]),行为未定义,可能导致程序崩溃或资源未完全释放。
动态内存管理容易出错,以下是几个关键点:
• 避免重复释放:delete 同一指针多次会导致未定义行为。
• 防止内存泄漏:
每次 new 都应有对应的 delete,尤其是在异常或提前返回的情况下。
• 检查空指针:
虽然 new 默认失败会抛出 std::bad_alloc,但可用 nothrow 版本避免异常:
int* p = new(std::nothrow) int; // 失败返回 nullptr
• 匹配使用:
new 与 delete、new[] 与 delete[] 必须成对使用。
手动管理内存容易出错。现代C++推荐使用智能指针来自动管理生命周期。
• 使用 std::unique_ptr:std::unique_ptr<int> ptr = std::make_unique<int>(42);
// 超出作用域自动释放
• 使用 std::shared_ptr:
多个所有者共享同一对象时使用。
• 动态数组建议用 std::vector:
比 raw pointer + new[] 更安全、更高效。
基本上就这些。new 和 delete 是基础,但在实际开发中,优先考虑 RAII 和智能指针,能大幅减少内存问题。
以上就是c++++中new和delete的使用与内存管理 _c++动态内存分配与释放方法的详细内容,更多请关注php中文网其它相关文章!
c++怎么学习?c++怎么入门?c++在哪学?c++怎么学才快?不用担心,这里为大家提供了c++速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号