C++ 堆内存操作:申请 使用 释放

发布时间:2025-04-28      访问量:32
在C++里,堆内存的申请、使用和释放通常借助`new`、`new[]`、`delete`与`delete[]`运算符来实现。下面为你详细介绍其使用方法。

单个对象的内存申请与释放
若要申请单个对象的内存,可以使用`new`运算符,释放时则用`delete`运算符。示例代码如下:
cpp #include <iostream> int main() { // 申请一个int类型的堆内存 int* ptr = new int; // 为堆内存赋值 *ptr = 10; // 输出堆内存中的值 std::cout << "Value: " << *ptr << std::endl; // 释放堆内存 delete ptr; return 0; }
在上述代码中,`new int`申请了一个`int`类型的堆内存,`delete ptr`则释放了该内存。

数组的内存申请与释放
若要申请数组的内存,可以使用`new[]`运算符,释放时用`delete[]`运算符。示例代码如下:
cpp #include <iostream> int main() { // 申请一个包含5个int元素的数组的堆内存 int* arr = new int[5]; // 为数组元素赋值 for (int i = 0; i < 5; ++i) { arr[i] = i; } // 输出数组元素的值 for (int i = 0; i < 5; ++i) { std::cout << "arr[" << i << "] = " << arr[i] << std::endl; } // 释放数组的堆内存 delete[] arr; return 0; }
在上述代码中,`new int[5]`申请了一个包含5个`int`元素的数组的堆内存,`delete[] arr`释放了该数组的内存。

自定义对象的内存申请与释放
对于自定义对象,同样能使用`new`和`delete`来申请和释放内存。示例代码如下:
cpp #include <iostream> class MyClass { public: MyClass() { std::cout << "Constructor called" << std::endl; } ~MyClass() { std::cout << "Destructor called" << std::endl; } }; int main() { // 申请一个MyClass对象的堆内存 MyClass* obj = new MyClass(); // 释放MyClass对象的堆内存 delete obj; return 0; }
在上述代码中,`new MyClass()`申请了一个`MyClass`对象的堆内存,`delete obj`释放了该对象的内存。当对象被创建时,构造函数会被调用;当对象被销毁时,析构函数会被调用。

注意事项
- 运用`new`和`new[]`申请的内存,必须使用`delete`和`delete[]`来释放,不然会造成内存泄漏。
- 释放内存之后,要把指针设为`nullptr`,防止出现悬空指针。示例代码如下:
cpp int* ptr = new int; delete ptr; ptr = nullptr;

通过上述方法,你就能在C++中正确地申请、使用和释放堆内存了。
堆内存
多线程
strdup
初始化器
冒泡排序
增删改查
BufferedReader
输入输出
面向对象
生命周期
闭包的概念
原型链
Flask
mysql-connector-python
单例模式
浅拷贝
隔离级别
索引
InnoDB
左连接
聚合函数
PuTTY
TRUNCATE
str_starts_with_many
DateTime
array_combine
闭包的概念