📜  在C++中删除对象数组(1)

📅  最后修改于: 2023-12-03 15:23:22.648000             🧑  作者: Mango

在C++中删除对象数组

在C++中,我们通常使用new关键字动态地分配内存来创建对象数组。但是,使用完这些对象数组后,我们也需要合理地释放它们占用的内存空间。本文将介绍在C++中如何删除对象数组。

删除单个对象

首先,我们需要知道如何删除单个对象。在C++中,我们可以使用delete关键字来删除通过new关键字动态分配的单个对象。例如:

int* ptr = new int(10); // 动态分配一个int类型的对象并初始化为10
delete ptr; // 删除ptr指向的对象

在这个例子中,我们通过new关键字动态地创建了一个int类型的对象,并将其初始化为10。然后,我们使用delete关键字删除了这个对象,并释放了它占用的内存空间。

删除对象数组

接下来,我们将介绍如何删除对象数组。在C++中,我们可以使用delete[]关键字来删除通过new[]关键字动态分配的对象数组。例如:

int* ptr = new int[10]; // 动态分配一个int类型的对象数组
delete[] ptr; // 删除ptr指向的对象数组

在这个例子中,我们通过new[]关键字动态地创建了一个int类型的对象数组,长度为10。然后,我们使用delete[]关键字删除了这个对象数组,并释放了它占用的内存空间。

需要注意的是,我们不能使用delete关键字来删除对象数组。例如:

int* ptr = new int[10]; // 动态分配一个int类型的对象数组
delete ptr; // 错误:不能用delete关键字删除对象数组

如果我们错误地使用了delete关键字来删除对象数组,那么程序将会产生未定义的行为。

析构函数的作用

当我们删除对象数组时,每个对象的析构函数将被调用。因此,在定义对象时,我们应该为它们提供一个析构函数。例如:

class MyClass {
public:
    ~MyClass() { /* 析构函数的实现 */ }
    // 其它的成员函数和数据成员
};

MyClass* ptr = new MyClass[10]; // 动态分配一个MyClass类型的对象数组
delete[] ptr; // 调用每个对象的析构函数并释放内存

在这个例子中,我们定义了一个带有析构函数的MyClass类。当我们通过new[]关键字动态地创建一个MyClass类型的对象数组时,每个对象的析构函数将在删除它们时被调用。这样,我们就可以正确地释放对象数组所占用的内存空间。

总结

在C++中,我们使用new关键字动态地分配内存来创建对象数组。使用完这些对象数组后,我们需要通过delete[]关键字将它们释放。在定义对象时,我们应该提供一个析构函数以确保对象数组在被删除时正确地释放其占用的内存空间。