c++ - 删除 MyClass *Array[10]

标签 c++ arrays memory-management

我在尝试使用 delete 释放内存而不是在 for 循环中时真的卡住了。

    MyClass *Array[10];

cout << "Step 1 - Allocation" << endl << endl;
Array[0] = new MyClass();
Array[1] = new MyClass();
Array[2] = new MyClass(2, 4.6);
Array[3] = new MyClass(*Array[2]);
Array[4] = new MyClass();
Array[5] = new MyClass(13, 66.6);
Array[6] = new MyClass(75, 9.43);
Array[7] = new MyClass(*Array[6]);
Array[8] = new MyClass(*Array[1]);
Array[9] = new MyClass(*Array[3]);

cout << endl << "Step 2 - Write" << endl << endl;
for(int i=0; i<10; i++)
{
    Array[i]->write();
    cout << endl;
}

cout << endl << "Step 3 - Deallocation" << endl << endl;

我试过 delete[] 数组,但它不起作用。

代码必须保持原样,因为它按照要求执行的操作是正确的。唯一的就是加一个delete(单行不是for循环)来删除Array。

最佳答案

您需要删除使用 new 创建的每个对象:

for (unsigned i(0); i < 10; ++i)
    delete Array[i];

Array本身是局部变量;你没有使用 new创建它,所以你不使用 delete摧毁它。当它超出范围时,它将被销毁。

为了解决必须“单行而不是 for 循环”完成删除的更新约束,我想,可以这样写:

delete Array[0]; delete Array[1]; delete Array[2]; delete Array[3]; delete Array[4]; delete Array[5]; delete Array[6]; delete Array[7]; delete Array[8]; delete Array[9];

这是单行代码,不使用循环。不可能使用单个 delete表达破坏十个实际上不相关的对象。


但不要这样做。真的。手动资源管理是危险的,而且很难正确执行。 C++ 具有自动资源管理功能,您应该使用它们。在这种情况下,使用 std::vector<MyClass> 会好得多。 :

std::vector<MyClass> Array;
Array.push_back(MyClass());
Array.push_back(MyClass());
Array.push_back(MyClass(2, 4.6));
Array.push_back(MyClass(Array[2]));
// Etc.

没有 new在这个例子中,因此没有 delete是必须的。 std::vector将在销毁时清理所有内容。

关于c++ - 删除 MyClass *Array[10],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10741615/

相关文章:

c++ - 对于每个模板类型,一个集合类型的参数

c++ - 在多个平台和架构上部署?

c++ - C++ 中的自定义异常

arrays - 按索引映射两个数组

c - C中的动态分配

c++ - c++ 中的 .erase() 问题

PHP 自定义排序 : Manual sorting an array based on specified keys

javascript - 查找数组中最接近的较小值

android - HTC one - 应用程序每次都被杀死

c++ - 'delete' 的数组形式是什么?