Zawsze się nad tym zastanawiałem, ale dlaczego przeciążanie operatorów nie jest dostępne na lekcjach w Delphi?Dlaczego dla klas w Delphi nie jest dostępne przeciążanie operatorów?
Pamiętam, jak czytałem odpowiedź raz w biegu, i powiedziałem, że to będzie w konflikcie z czymś, ale nie pamiętam wiele. O ile mogę powiedzieć, tylko niejawny operator może powodować trochę problemów, ponieważ klasy są przechowywane na stercie, a przypisywanie jest w rzeczywistości kopią adresu sterty (w zasadzie kopiowanie wskaźników).
Działa w Delphi.Net ponieważ .NET robi zbierania śmieci. Można to rozwiązać w rodzimym języku Delphi na dwa sposoby: 1. jeśli operatory były dozwolone na interfejsach, a klasy implementujące ten operator dziedziczą z TInterfacedObject. 2. Jeśli klasy zarządzające zostały dodane do języka Delphi. W tej chwili Mason ma rację: dostaniesz wszędzie wycieki pamięci. Zobacz także mój referat na ten link: http://wiert.wordpress.com/2009/10/19/delphi-operator-overloading-table-of-operators-names-and-some-notes-on-usage-and -glitches/ –
Tak, rozumiem, dlaczego można to uznać za problem, i to jest dokładnie to, co przeczytałem w tym artykule, teraz, gdy go pamiętam. Jednakże, jak powiedziałem w swoim komentarzu do odpowiedzi Masona, nie sądzę, że jest to ograniczenie, ponieważ myślę, że możesz to zrobić, jeśli zaimplementujesz tylko niewielką garbage collection (która nie będzie miała żadnych skutków ubocznych). – Cloud737
Jeśli intefaces miałoby operatorów, pojawiłoby się wiele problemów, jak na przykład brak możliwości anulowania niektórych operatorów. Na przykład, wyobraź sobie posiadanie operatora Implicit w interfejsie, a następnie posiadanie obiektu, który potrzebuje interfejsu, ale absolutnie nie jest także operatorem Implicit. Kiedy spróbujesz zadania, całe piekło może się wyrwać i trudno będzie znaleźć twój problem. Rzecz w tym, że operatorzy nie powinni być nigdy dziedziczeni, jeśli chcesz użyć "odziedziczonej" wersji, powinieneś przeładować ją ponownie, a następnie typecast. Ale to oznacza, że klasy również muszą je mieć. – Cloud737