Какая польза или в чем причина того, что new () и delete () должны быть реализованы как операторы в c ++? Каковы преимущества того, чтобы сделать его оператором вместо функции?
new
Оператор не может быть функцией, потому что он принимает тип в качестве аргумента. Вы не можете написать new foo_type
как вызов функции, потому что foo_type
это не выражение, которое создает значение, а имя типа.
delete
оператор может быть функцией, перегруженной для разных типов указателей, и дополнительной необязательной bool
аргумент в пользу delete []
семантика. Почему есть delete
оператор, вероятно, для симметрии с его new
коллега.
Тем не менее, функции шаблона могут принимать типы в качестве аргументов шаблона. Но new
а также delete
операторы исторически предшествуют шаблонам.
Также может быть написана функция, которая принимает вместо типа экземпляр прототипа типа, из которого создается объект: newobj(m_class(constructor_arg))
, это newobj
перегружен для разных типов. Он выделяет пространство, копирует конструкции в него и возвращает объект.
Так что в итоге дизайн отражает вкусы и прихоти дизайнера.
Само разделение между операторами и функциями (а также операторами, объявлениями и т. Д.) Не является строго необходимым при проектировании языка.
Есть две распространенные причины, по которым я знаю, что люди отвергают их.
1) Используйте new / delete для отслеживания пула объектов. New извлекает первый неиспользованный ресурс из пула, delete возвращает этот ресурс в пул. Это полезно, если вы постоянно размещаете / освобождаете объекты.
2) Отслеживание использования памяти. Вы можете отследить утечки или проблемы с перезаписью памяти. Например, вы можете заполнить память с любой стороны или отслеживать, кто выделяет память, чтобы вы могли отследить, кто ее не освободил.