为什么Delphi中的类没有运算符重载?

Clo*_*737 12 delphi class operator-overloading

我总是想知道这一点,但为什么运算符重载不适用于Delphi中的类?

我记得在跑步时读了一次答案,它说它会与某些东西发生冲突,但我记不起来了.据我所知,只有隐式运算符可能会导致一些问题,因为类存储在堆上并且赋值实际上是堆地址的副本(基本上是复制指针).

Mas*_*ler 12

关.这是因为对象是引用类型,并且手动管理内存.所以,如果你说myResult := myObject1 + myObject2 + myObject3;,你必须在那里的某个地方创建一个中间对象,并且没有代码可以释放它,所以你会得到内存泄漏.

  • 编译器可以添加管理字符串的代码,那么为什么它不能处理隐藏对象呢?我认为不是这个原因。 (2认同)
  • 编译器无法销毁中间对象的原因是它无法知道是否存在任何"中间"对象.操作符可能会从先前的长计算返回某个缓存对象的实例,或者它可能返回一个操作数对象,或者它可能返回一些需要保留在当前表达式之外的现有对象,例如表示AST的对象将在计划的后期进行评估.编译器*不知道*对象来自哪里或者您将在以后使用它. (2认同)