Мне хорошо известно, что в С++, что delete[] соответствует new[], delete соответствует new. Речь идет не о синтаксисе С++. Мне интересно, почему причины delete[] были определены как нечто отличное от простого delete. Каковы причины реализации этого?
Рассмотрим, что происходит с этим кодом:
MyClass *object = new MyClass;
delete object;
Когда встречается delete, менеджер памяти должен искать значение указателя объекта в своей структуре распределения, независимо от того, что он есть, и помечать соответствующий блок памяти sizeof(MyClass) как свободный.
Теперь рассмотрим, что происходит с этим кодом:
MyClass *array = new MyClass[ num_objects ];
delete [] array;
Когда встречается delete, менеджер памяти должен искать значение указателя массива в своей структуре распределения, независимо от того, что это такое, найти num_objects значение из этой структуры и пометить соответствующий num_objects*sizeof(MyClass) фрагмент памяти как бесплатный.
Помимо num_objects предполагается 1 в одном объекте и просматривается во внутренней структуре данных в массиве, я не вижу разницы. Итак, почему delete и delete[] не могли быть написаны одинаково?
Другими словами, что не так с
MyClass *object = new MyClass;
реализуется как
MyClass *object = new MyClass[1];
так что синтаксис С++ не должен делать различия между delete и delete[]?