通过不同类型的指针删除缓冲区?

Rog*_*mbe 10 c++ pointers memory-management

说我有以下C++:

char *p = new char[cb];
SOME_STRUCT *pSS = (SOME_STRUCT *) p;
delete pSS;
Run Code Online (Sandbox Code Playgroud)

根据C++标准,这是安全的吗?我需要回头char*再使用delete[]吗?我知道它在大多数C++编译器中都有效,因为它是普通的普通数据,没有析构函数.它保证安全吗?

thu*_*ang 9

它不能保证安全.这是C++ FAQ lite中的相关链接:

[16.13]我可以删除[]的删除时阵列一些内置的类型(char,int等)?

http://www.parashift.com/c++-faq-lite/freestore-mgmt.html#faq-16.13


Dan*_*mes 6

不,它是未定义的行为 - 编译器可以合理地做一些不同的事情,并且正如thudbang 链接的C++ FAQ条目所说,operator delete[]可能会超载以执行不同的操作operator delete.你有时可以侥幸逃脱它,但是对于你不能的情况,养成将delete []与new []匹配的习惯也是一种好习惯.