У меня есть небольшое сомнение. Я не знаю, является ли мой вопрос действительным или нет, но я помещаю его в SO. Первый вопрос: когда мы перегрузить оператор новый и оператор удаления (не для массивов) на глобальном или класса уровне, а затем, если мы обрешетка массив объектов что-то, как показано ниже:перегружать оператора new и delete
A* obj = new A[10];
delete []obj;
то в таком случае, почему это звоню оператору новый и удалять, даже если я не перегружен массивы, т.е. я не перегружен, как показано ниже
void* operator new[](size_t size){}
второго вопрос: Но если я перегружать новый и удалить оператор для массивов, как и выше, то это будет вызовите синтаксис массива.
Последнее, но не менее важное, если я вообще не перегружаю новый и удаляющий оператор, то какой из них будет вызываться при создании массива объектов. Это один синтаксис массива или обычный. Пожалуйста, дайте мне знать, если мой вопрос не ясен.
Таким образом, это означает, что нам не нужно перегружать 'новый []' вообще, если будет делать то же самое, что и «новый», интересно знать. Является ли эта делеция стандартной или самой распространенной версией по умолчанию 'new []'? –
* "(Но почему вы делаете новый []? Я никогда не нашел случая, когда это было бы полезно.)« * - Возможно, просто проверить свои перегруженные «новые» -операторы и увидеть, что он ведет себя странно (с его точки зрения)? Или предоставить SSCCE для вопроса? –
@ChristianRau Это требуется по стандарту. Вам нужно только перегрузить 'operator new []()', если вы хотите, чтобы у него было другое поведение (например, если член 'operator new()' выделяет из пула и запускается с 'assert (size == sizeof (T)); '). –