单个对象的内存申请与释放
若要申请单个对象的内存,可以使用`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++中正确地申请、使用和释放堆内存了。