C++ 动态内存学习笔记

在 C++ 中,动态内存是通过 new 和 delete 关键字进行管理的。动态内存分配可以帮助程序在运行时动态地创建和释放内存,从而增加程序的灵活性。

基本用法

使用 new 运算符可以在堆中分配一个指定大小的内存块。例如,要分配一个包含 10 个整数的数组,可以这样写:

cppCopy Code
int *arr = new int[10];

上面的代码首先在堆中分配了可以容纳 10 个整数的内存块,然后将 arr 指针指向该内存块的起始地址。为了避免内存泄漏,必须在不需要使用该内存块时使用 delete 运算符将其释放:

cppCopy Code
delete[] 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++ 中动态内存的基本用法和一个示例程序。在实际编程时,请务必注意对内存的正确管理,以避免造成内存泄漏或其他潜在的问题。