Почему в Delphi нет перегрузок операторов для классов?
Я всегда задумывался об этом немного, но почему перегрузка операторов недоступна для классов в Delphi?
Я помню, как однажды читал ответ, и он сказал, что это будет в чем-то противоречить, но я не могу много помнить. Насколько я могу судить, только неявный оператор может вызвать некоторые проблемы, поскольку классы хранятся в куче, а назначение - это, фактически, копия адреса кучи (в основном копирующие указатели).
Ответы
Ответ 1
Закрыть. Это потому, что объекты являются ссылочными типами, а память управляется вручную. Поэтому, если вы сказали myResult := myObject1 + myObject2 + myObject3;
, вам нужно будет создать промежуточный объект где-то там, и там нет кода для его освобождения, поэтому вы получите утечки памяти.
Ответ 2
У вас может быть перегрузка операторов для классов, но только для компилятора NextGen, где классы используют ARC.
См.: http://blog.marcocantu.com/blog/class_operators_delphi.html
Это было представлено в XE5, см. Список функций и версии языка Delphi, в которых они были введены/устарели
Ответ 3
Мейсон Уилер говорит, что это невозможно, потому что управление промежуточными объектами.
Но согласно документации Embarcadero, операторы класса, где это возможно, с Delphi 2009.
RAD Studio 2009 - перегрузка оператора
Новые функции языка Delphi с Delphi 7