Kotlin多平台,什么是StableRef生存期?

m2xkgtsf  于 2023-02-24  发布在  Kotlin
关注(0)|答案(1)|浏览(92)

我有一个红黑树的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?
管理这样的结构的生命周期的最佳实践是什么?

tv6aics1

tv6aics11#

不,您不需要存储对TreeMapEntry的引用;StableRef.create将为您创建它,它不会被GC释放。
是的,您必须使用StableRef#dispose()方法手动处理StableRef

相关问题