我在尝试使用 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/