【发布时间】:2023-02-23 15:12:20
【问题描述】:
我有 RedBlackTree 的 C 实现,我想将 Kotlin 对象存储在该树中。问题是:如何管理对象的生命周期以及它是如何工作的?
这是我在树中添加一对的代码
fun add(key: Key, value: Value) {
val stableRef = StableRef.create(TreeMapEntry(key, value))
c_rbinsert(nativeTree, stableRef.asCPointer())
}
c_rbinsert 是接受 void* 的 C 函数。
我有几个问题:
TreeMapEntry 是被发送到这里进行垃圾收集还是以某种方式保存在 StableRef 中?
我是否还需要在其他地方存储对 TreeMapEntry 的引用以阻止它被垃圾收集?
我需要手动处理 StableRef 吗?
管理此类结构生命周期的最佳实践是什么?
【问题讨论】:
标签: c kotlin kotlin-multiplatform kotlin-native