我应该释放一个0大小的动态数组吗?

问题描述 投票:0回答:1

您好,我有一个简单的例子:由于C ++允许类型为T的0大小的动态数组,那么如何释放它?

a = new int[0];
delete[] a;// UB?

如您在上面看到的,C ++编译器现在不涉及动态数组的大小,因此它可以为0,因此代码可以正常工作。我也知道,此数组a用作过去指针,因此既不能取消引用也不能递增/递减。

  • 我不知道在这种情况下,运算符new会在幕后发生什么?是否分配内存?还是失败?

  • 如果我不使用delete[] a;释放此内存,是否发生内存泄漏?

  • 可以分配给它,例如:a = new int[10];

c++ dynamic-arrays
1个回答
0
投票

您的零数组永远不会是零数组。在new int[0]情况下,将分配少量内存,是的,您也应该取消分配它。

© www.soinside.com 2019 - 2024. All rights reserved.