new () и delete () как операторы в C ++?

Какая польза или в чем причина того, что new () и delete () должны быть реализованы как операторы в c ++? Каковы преимущества того, чтобы сделать его оператором вместо функции?

3

Решение

new Оператор не может быть функцией, потому что он принимает тип в качестве аргумента. Вы не можете написать new foo_type как вызов функции, потому что foo_type это не выражение, которое создает значение, а имя типа.

delete оператор может быть функцией, перегруженной для разных типов указателей, и дополнительной необязательной bool аргумент в пользу delete [] семантика. Почему есть delete оператор, вероятно, для симметрии с его new коллега.

Тем не менее, функции шаблона могут принимать типы в качестве аргументов шаблона. Но new а также delete операторы исторически предшествуют шаблонам.

Также может быть написана функция, которая принимает вместо типа экземпляр прототипа типа, из которого создается объект: newobj(m_class(constructor_arg)), это newobj перегружен для разных типов. Он выделяет пространство, копирует конструкции в него и возвращает объект.

Так что в итоге дизайн отражает вкусы и прихоти дизайнера.

Само разделение между операторами и функциями (а также операторами, объявлениями и т. Д.) Не является строго необходимым при проектировании языка.

7

Другие решения

Есть две распространенные причины, по которым я знаю, что люди отвергают их.

1) Используйте new / delete для отслеживания пула объектов. New извлекает первый неиспользованный ресурс из пула, delete возвращает этот ресурс в пул. Это полезно, если вы постоянно размещаете / освобождаете объекты.

2) Отслеживание использования памяти. Вы можете отследить утечки или проблемы с перезаписью памяти. Например, вы можете заполнить память с любой стороны или отслеживать, кто выделяет память, чтобы вы могли отследить, кто ее не освободил.

3

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector