问题描述
我将 TKeyframe 作为一个类,在基类 TTrack 中使用 Keyframes: TObjectlist<TKeyframe>
,但在 TTrack 的后代中,Keyframes 包含 TKeyframe 的后代以及附加字段和适当的类型转换。
TTrack 具有调用 Keyframes.Move 和 Keyframes.Delete 方法的方法,这些方法通常似乎与 TKeyframe 的后代一起正常工作。删除不在列表末尾的关键帧似乎可以正常工作,除非在特定情况下,当下一个关键帧中的一个附加字段被一些我没有做过的后续操作设置为 NaN 时能够隔离。
TList Delete 的源代码使用 System.Move 来移动类的指针,因此对我来说它看起来很安全。那么与 T 的后代一起使用是否安全? TList Move 为正在移动的项目强制转换为 T,所以看起来更狡猾,但到目前为止我还没有遇到任何问题。
解决方法
是的,TObjectList<T>
中没有任何东西会影响多态性,而 System.Move
只是移动内存。
要找出哪些代码将某些字段设置为意外值,我建议使用 data breakpoint。