您好,我有一个简单的例子:由于C ++允许类型为T
的0大小的动态数组,那么如何释放它?
a = new int[0];
delete[] a;// UB?
如您在上面看到的,C ++编译器现在不涉及动态数组的大小,因此它可以为0
,因此代码可以正常工作。我也知道,此数组a
用作过去指针,因此既不能取消引用也不能递增/递减。
我不知道在这种情况下,运算符new
会在幕后发生什么?是否分配内存?还是失败?
如果我不使用delete[] a;
释放此内存,是否发生内存泄漏?
可以分配给它,例如:a = new int[10];
?
您的零数组永远不会是零数组。在new int[0]
情况下,将分配少量内存,是的,您也应该取消分配它。