【问题标题】:Are generic TObjectlist operations Delete and Move typesafe for descendants?通用 TObjectlist 操作 Delete 和 Move 对后代来说是类型安全的吗?
【发布时间】:2021-06-19 16:53:29
【问题描述】:

我有 TKeyframe 作为一个类,Keyframes: TObjectlist<TKeyframe> 在一个基类 TTrack 中,但在 TTrack 的后代中,Keyframes 包含带有附加字段和适当类型转换的 TKeyframe 的后代。

TTrack 具有调用 Keyframes.Move 和 Keyframes.Delete 方法的方法,这些方法通常似乎与 TKeyframe 的后代一起正常工作。删除不在列表末尾的关键帧似乎工作正常,除非在特定情况下,当下一个关键帧中的一个附加字段被我没有的后续操作设置为 NaN 时可以隔离。

TList Delete 的源代码使用 System.Move 来移动只是类的指针,所以对我来说它看起来很安全。那么与 T 的后代一起使用是否安全? 对于要移动的项目,TList Move 会强制转换为 T,所以看起来更狡猾,但到目前为止我还没有遇到任何问题。

【问题讨论】:

    标签: delphi delphi-xe


    【解决方案1】:

    是的,TObjectList<T> 中没有任何影响多态性的内容,System.Move 只是移动内存。

    要找出哪些代码将某些字段设置为意外值,我建议使用data breakpoint

    【讨论】:

    • 谢谢,斯特凡。我认为应该是这样。只是一个奇怪的巧合。我能够使用数据断点找到错误。它仅在干净的 IDE 启动后才起作用,并在第一次命中后冻结程序,但它是我需要的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-26
    • 1970-01-01
    • 1970-01-01
    • 2011-08-17
    • 2011-06-19
    • 2021-04-25
    相关资源
    最近更新 更多