删除MyClass*数组[10]

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.

Jam*_*lis 8

您需要删除您使用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当它被破坏将清理一切.

  • @DeadMG:这不是reddit; 没有理由在评论中谴责这里的人,尤其是那些你认识的人很少,并且不在场的人为自己辩护. (3认同)

use*_*016 6

操作员delete[]必须与new[]您在此处未使用的操作员一起使用.您手动 new编辑了每个实例MyClass.您必须手动 delete每个实例MyClass.


K-b*_*llo 5

delete[]用于删除由其分配的内容new[],它不会调用delete数组的每个元素.您必须delete在循环中调用每个数组元素.

  • @ user1415587:在这种情况下,使用10`delete`语句. (2认同)