0 c++ arrays memory-management
我真的卡住尝试使用删除释放内存,而不是在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;
Run Code Online (Sandbox Code Playgroud)
我试过删除[]数组,但它不起作用.
代码必须保持原样,因为它要求做的正确.唯一的事情是添加一个删除(单行而不是for循环)来删除Array.
您需要删除您使用new以下创建的每个对象:
for (unsigned i(0); i < 10; ++i)
delete Array[i];
Run Code Online (Sandbox Code Playgroud)
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];
Run Code Online (Sandbox Code Playgroud)
这是一行代码,不使用循环.不可能使用单个delete表达式来破坏十个有效无关的对象.
但是不要这样做.真.手动资源管理很危险,很难正确完成.C++具有自动资源管理功能,您应该使用它们.在这种情况下,使用a会好得多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.
Run Code Online (Sandbox Code Playgroud)
有没有new在这个例子中,因此没有delete需要.在std::vector当它被破坏将清理一切.
delete[]用于删除由其分配的内容new[],它不会调用delete数组的每个元素.您必须delete在循环中调用每个数组元素.