C++删除操作符混淆

Ram*_*ngh 3 c++ delete-operator

可能重复:
(POD)释放内存:删除[]是否等于删除?

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?
Run Code Online (Sandbox Code Playgroud)

Ama*_*9MF 12

它可能看起来具有相同的效果,但事实并非如此.如果您的数组类型是抽象数据类型(即类),那么最后九个元素的析构函数将不会被调用.


Fre*_*son 8

因为你很幸运 这是未定义的行为.未定义行为的一种可能性是,即使确实发生了一些糟糕的事情,也似乎没有任何不好的事情发生.你可能要到晚些时候才发现.

您不能指望使用原始类型是安全的.阅读本文(由James Roth在评论中链接):https://isocpp.org/wiki/faq/freestore-mgmt#delete-array-built-ins


AnT*_*AnT 5

不起作用.它似乎很有效.展示未定义行为的代码可能在第一眼看上去"正常工作",就像一个带有错误的程序可能看起来在一个选择不当的测试套件上"工作正常".