首页 > 解决方案 > 删除[i]数组和删除数组[i]的区别

问题描述

我实际上想先描述我的问题。在我的代码中,我有一个名为 Employee 的基类,然后我还有 4 个类。我想让我的类抽象(基本上我使用的是多态概念)。我创建了一个基类类型的指针数组,并在其中添加了对象(堆上的未命名对象)。现在我想释放对象。我用过delete[i] arraydelete array[i]两者都在工作(一次一个)。有人可以解释一下它们之间的区别吗?delete[i]如果错了,为什么两者都在工作?我正在使用delete[i] arraydelete array[i]使用 for 循环。

main就好像:

Employee *arr[10];
arr[0] =new SalariedEmployee ("first name","last name","number",200);

现在我想删除这个对象

标签: c++arrays

解决方案


delete[i] array;

在标准 C++ 中是错误的。它确实可以在 msvc (demo)上编译。这是一个编译器特定的扩展(感谢 Blastfurnace 指出这一点)。

正确的版本是

delete array[i];

销毁在堆上分配的对象并释放相应的内存。

但是,手动内存管理有时会变得非常困难。所以现代 C++ 中的解决方案类似于

std::array<std::uniqe_ptr<Employee>, 10> array;

对于带有指向Employee's 的固定大小的数组。


推荐阅读