Siempre me he preguntado un poco sobre esto, pero ¿por qué la sobrecarga del operador no está disponible para las clases en Delphi?¿Por qué la sobrecarga del operador no está disponible para las clases en Delphi?
Recuerdo haber leído una respuesta mientras huía, y decía que entraría en conflicto con algo, pero no recuerdo mucho. Por lo que puedo decir, solo el operador implícito puede causar un poco de problemas ya que las clases se almacenan en el montón y la asignación es en realidad una copia de la dirección del montón (básicamente copiar punteros).
Funciona en Delphi.NET porque .NET hace la recolección de basura. Esto podría resolverse en el Delphi nativo de dos maneras: 1. si los operadores tienen acceso a las interfaces, y las clases que implementan ese operador heredarán de TInterfacedObject. 2. si las clases administradas se agregaron al lenguaje Delphi. En este momento, Mason tiene razón: tendrías pérdidas de memoria por todos lados. Véase también mi charla a la que se hace referencia en este enlace: http://wiert.wordpress.com/2009/10/19/delphi-operator-overloading-table-of-operators-names-and-some-notes-on-usage-and -glitches/ –
Sí, veo por qué esto podría considerarse un problema, y esto es exactamente lo que he leído en ese artículo, ahora que lo recuerdo. Sin embargo, como dije en mi comentario a la respuesta de Mason, no creo que esto sea realmente una limitación, ya que creo que puedes hacerlo si implementas solo un poco de recolección de basura (que no tendrá ningún efecto secundario). – Cloud737
Si las interfaces tuvieran operadores, surgirían muchos problemas, como por ejemplo no poder cancelar algunos operadores. Por ejemplo, imagina tener un operador implícito en una interfaz y luego tener un objeto que sí necesita la interfaz, pero no necesariamente el operador implícito. Cuando intentas una tarea, todo el infierno puede desatarse, y sería difícil encontrar tu problema. La cosa es que los operadores nunca deben heredarse, si quieres usar la versión "heredada", debes sobrecargarla nuevamente y luego encasillarla. Pero eso significa que las clases también deben tenerlo. – Cloud737