我有一个红黑树的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?
管理这样的结构的生命周期的最佳实践是什么?
1条答案
按热度按时间tv6aics11#
不,您不需要存储对
TreeMapEntry
的引用;StableRef.create
将为您创建它,它不会被GC释放。是的,您必须使用
StableRef#dispose()
方法手动处理StableRef
。