可能是重复问题:
(POD)释放内存:delete[]和delete是否相同?
char* pChar = new char[10];
delete pChar; // this should not work but it has same effect as
// delete[], WHY?
// I know this is illegal, but why does it work?
可能是重复问题:
(POD)释放内存:delete[]和delete是否相同?
char* pChar = new char[10];
delete pChar; // this should not work but it has same effect as
// delete[], WHY?
// I know this is illegal, but why does it work?
看起来可能具有相同的效果,但实际并非如此。如果您的数组类型是抽象数据类型(即一个类),则最后九个元素上的析构函数不会被调用。
它不能正常工作。它仅仅表现出了正常工作的样子。展示未定义行为的代码可能在第一眼看上去就像是“正常工作”的,就像一个充满漏洞的程序在选择不当的测试套件时也可能“运行良好”。
这是未定义的行为。由于“这次可以工作”属于“未定义”的范畴,因此它可能在某些平台、某些编译器上工作。但仍然不应该这样做。你尝试过像那样dealloc一个带有析构函数的对象数组,并查看析构函数是否被调用了吗?
编辑:根据您的评论,您已经尝试过了...
delete
与delete[]
的问题。 - David Thornley