我总是想知道这一点,但为什么Delphi中的类不能使用运算符重载?
我记得在跑步时读了一次答案,它说它会与某些东西发生冲突,但我记不起来了。据我所知,只有隐式运算符可能会导致一些问题,因为类存储在堆上并且赋值实际上是堆地址的副本(基本上是复制指针)。
答案 0 :(得分:11)
关闭。这是因为对象是引用类型,并且手动管理内存。所以如果你说myResult := myObject1 + myObject2 + myObject3;
,你必须在那里的某个地方创建一个中间对象,并且没有代码可以释放它,所以你得到了内存泄漏。
答案 1 :(得分:1)
您可以对类进行运算符重载,但仅适用于类使用ARC的NextGen编译器
请参阅:__getitem__()
这是在XE5中引入的,请参阅:http://blog.marcocantu.com/blog/class_operators_delphi.html
答案 2 :(得分:0)
Mason Wheeler说这是不可能的,因为中间对象管理。
但根据Embarcadero文档,尽可能使用Delphi 2009进行类操作。
RAD Studio 2009 - Operator Overloading New Delphi language features since Delphi 7