您的位置:首页 >C++堆内存管理:new与delete正确使用方法
发布于2025-08-04 阅读(0)
扫一扫,手机访问
<p>在C++中,手动管理堆内存需掌握new和delete的正确使用方法。1. new用于申请堆内存,形式包括单个对象T ptr = new T和数组对象T ptr = new T[count];2. delete用于释放内存,单个对象用delete ptr,数组对象必须用delete[] ptr,否则导致未定义行为;3. 内存泄漏常见于未及时释放或提前退出导致跳过delete,推荐使用智能指针自动管理资源;4. new/delete与malloc/free关键区别在于前者调用构造/析构函数,后者仅分配原始内存,且类型安全不同。正确配对使用new/delete并优先采用智能指针可显著减少内存管理错误。</p>

在C++中,手动管理堆内存是开发者必须掌握的一项基本技能。new 和 delete 是用来动态分配和释放内存的关键字,用得不对就容易导致内存泄漏或程序崩溃。

下面几个方面是你最需要了解的:
使用 new 可以在堆上为一个对象或一组对象分配内存空间。它的基本形式有两种:

T* ptr = new T;T* ptr = new T[count];比如:
int* p = new int; // 分配一个int的空间 int* arr = new int[10]; // 分配10个int的空间
注意:

new 默认会抛出 std::bad_alloc 异常(除非你使用 nothrow 版本)。[],否则 delete 的时候行为未定义。与 new 对应,释放内存要用 delete 或 delete[],区别在于是否用于数组:
delete ptr;delete[] ptr;错误示例:
int* arr = new int[10]; delete arr; // ❌ 错误!应该用 delete[]
这会导致未定义行为,可能不会立即报错,但长期运行可能导致严重问题。
所以记住:
new T[] 分配的,必须用 delete[]new T() 分配的,必须用 delete最常见的内存泄漏就是只分配不释放。比如:
void leak() {
int* p = new int(42);
// 没有 delete p;
}每次调用这个函数都会“吞掉”一块内存。解决办法很简单:确保每块 new 出来的内存都有对应的 delete。
还有些情况更隐蔽,例如:
推荐做法:
unique_ptr、shared_ptr),它们能自动管理内存生命周期虽然功能类似,但有几个关键区别要注意:
new / delete 是 C++ 运算符,会调用构造函数和析构函数;而 malloc / free 是库函数,只负责分配原始内存。delete 释放 malloc 分配的内存,也不要用 free 去释放 new 得到的内存。new 返回的是具体类型的指针,不需要强制转换;malloc 返回的是 void*,需要手动转换。举个例子:
MyClass* obj = new MyClass(); // 构造函数会被调用 delete obj; // 析构函数会被调用 MyClass* obj2 = (MyClass*)malloc(sizeof(MyClass)); // 构造函数不会被调用 free(obj2); // 析构函数也不会被调用
基本上就这些内容。手动管理堆内存看起来简单,但细节很容易忽略,尤其是在大型项目中。养成良好的习惯,比如配对使用 new/delete、优先使用智能指针,能大大减少 bug 的出现概率。
上一篇:星火英语APP图书查看教程
下一篇:快手草稿箱怎么找
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
8