But the above code is wrong, and it can cause a disaster at runtime. In particular, the code that is called for delete p is operator delete(void*), but the code that's called for delete[] p is operator delete[](void*). The default behavior for the latter is to call the former, but users are allowed to replace the latter with a different behavior (in which case they would normally also replace the corresponding new code in operator new[](size_t)). If they replaced the delete[] code so it wasn't compatible with the delete code, and you called the wrong one (i.e., if you said delete p rather than delete[] p), you could end up with a disaster at runtime. |
|||||||||
[16.13] After p = new Fred[n], how does the compiler know there are n objects to be destructed during delete[] p? |
|||||||||
24-Mar-98 |
Page 12 |
TAM/C201 |