删除[i] 数组和删除数组 [i] 之间的区别

Difference between delete[i] array and delete array[i]

本文关键字:删除 数组 区别 之间      更新时间:2023-10-16

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

main就像:

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

现在我想删除这个对象

delete[i] array;

在标准C++中是错误的。但它直接编译在 msvc(演示(上。这是一个特定于编译器的扩展(感谢Heart指出这一点(。

正确的版本是

delete array[i];

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

但是,手动内存管理有时会变得非常困难。因此,现代C++的解决方案将是这样的

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

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