c++ - 删除[i]数组和删除数组[i]的区别
问题描述
我实际上想先描述我的问题。在我的代码中,我有一个名为 Employee 的基类,然后我还有 4 个类。我想让我的类抽象(基本上我使用的是多态概念)。我创建了一个基类类型的指针数组,并在其中添加了对象(堆上的未命名对象)。现在我想释放对象。我用过delete[i] array
,delete array[i]
两者都在工作(一次一个)。有人可以解释一下它们之间的区别吗?delete[i]
如果错了,为什么两者都在工作?我正在使用delete[i] array
或delete array[i]
使用 for 循环。
main
就好像:
Employee *arr[10];
arr[0] =new SalariedEmployee ("first name","last name","number",200);
现在我想删除这个对象
解决方案
delete[i] array;
在标准 C++ 中是错误的。但它确实可以在 msvc (demo)上编译。这是一个编译器特定的扩展(感谢 Blastfurnace 指出这一点)。
正确的版本是
delete array[i];
销毁在堆上分配的对象并释放相应的内存。
但是,手动内存管理有时会变得非常困难。所以现代 C++ 中的解决方案类似于
std::array<std::uniqe_ptr<Employee>, 10> array;
对于带有指向Employee
's 的固定大小的数组。
推荐阅读
- python - 如何使用 lambda 从 AWS S3 存储中获取特定文件字数?
- javascript - 使用 Ajax 更新 Woocommerce 产品库
- sql - 如何透视 SQL 数据?
- android - 如何模拟用于浓缩咖啡测试的相机输入?
- android - 是否可以在没有 Root 的情况下推送 ADB 系统文件?
- amazon-web-services - 如何在打开图片网址时修复“访问被拒绝”
- validation - 如何在本机反应中验证文本输入以获取最少字符
- matlab - MATLAB:为什么函数不能处理给定日期输入中的错误?
- c# - 在 Service Fabric 服务中启用每个终结点的 gzip 压缩
- unity3d - VR/AR 工具包问题