C++ 动态内存学习笔记
在 C++ 中,动态内存是通过 new 和 delete 关键字进行管理的。动态内存分配可以帮助程序在运行时动态地创建和释放内存,从而增加程序的灵活性。
基本用法
使用 new 运算符可以在堆中分配一个指定大小的内存块。例如,要分配一个包含 10 个整数的数组,可以这样写:
cppCopy Codeint *arr = new int[10];
上面的代码首先在堆中分配了可以容纳 10 个整数的内存块,然后将 arr 指针指向该内存块的起始地址。为了避免内存泄漏,必须在不需要使用该内存块时使用 delete 运算符将其释放:
cppCopy Codedelete[] arr;
使用 delete 运算符时应注意以下几点:
- 如果使用 new[] 运算符分配了数组,则必须使用 delete[] 运算符进行释放;
- 如果使用 new 运算符分配了单个对象,则必须使用 delete 运算符进行释放;
- 在释放内存块之前,必须确保不再需要该内存块;
- 不要尝试释放堆栈上的对象。
实例
下面是一个示例程序,演示如何使用动态内存分配来实现一个简单的数组类:
cppCopy Code#include <iostream>
class DynArray
{
public:
DynArray(int size) : m_size(size)
{
m_arr = new int[size];
}
~DynArray()
{
delete[] m_arr;
}
int& operator[](int index)
{
return m_arr[index];
}
private:
int m_size;
int* m_arr;
};
int main()
{
DynArray arr(10);
for (int i = 0; i < 10; i++)
{
arr[i] = i;
}
for (int i = 0; i < 10; i++)
{
std::cout << arr[i] << " ";
}
return 0;
}
上面的程序定义了一个 DynArray 类,该类包含一个动态分配的整数数组 m_arr 和一个整数 m_size,用于存储数组的大小。该类还重载了 [] 运算符,以便可以像使用普通数组一样访问其元素。在 main 函数中,创建了一个大小为 10 的 DynArray 对象,然后使用 for 循环向其中插入元素并打印输出。在程序结束时,DynArray 对象的析构函数会自动释放分配的内存。
至此,我们已经了解了 C++ 中动态内存的基本用法和一个示例程序。在实际编程时,请务必注意对内存的正确管理,以避免造成内存泄漏或其他潜在的问题。