Почему перегрузка операторов недоступна для классов в Delphi? - PullRequest
12 голосов
/ 19 января 2010

Я всегда задумывался об этом немного, но почему перегрузка операторов недоступна для классов в Delphi?

Я помню, как однажды читал ответ, находясь в бегах, и он говорил, что он может с чем-то конфликтовать, но я не могу вспомнить многое. Насколько я могу судить, только неявный оператор может вызвать некоторые проблемы, поскольку классы хранятся в куче, а присваивание фактически является копией адреса кучи (в основном копирование указателей).

Ответы [ 3 ]

12 голосов
/ 19 января 2010

Закрыть.Это потому, что объекты являются ссылочными типами, а память управляется вручную.Поэтому, если вы скажете myResult := myObject1 + myObject2 + myObject3;, вам придется создать промежуточный объект где-то там, и нет кода для его освобождения, поэтому вы получите утечки памяти.

1 голос
/ 08 мая 2015

Вы можете иметь перегрузку операторов для классов, но только для компилятора NextGen, где классы используют ARC.
Смотри: http://blog.marcocantu.com/blog/class_operators_delphi.html

Это было введено в XE5, см .: Список возможностей языка Delphi и версии, в которой они были представлены / устарели

0 голосов
/ 19 марта 2013

Мейсон Уилер говорит, что это невозможно, потому что управление промежуточными объектами.

Но согласно документации Embarcadero, операторы класса, где это возможно, с Delphi 2009.

RAD Studio 2009 - Перегрузка оператора Новые возможности языка Delphi начиная с Delphi 7

...