11

在 kotlin native 中,有一个 memScoped 函数,当控制超出范围时自动释放分配的内存。是否有类似本地对象的析构函数?

4

1 回答 1

17

当前的 Kotlin/Native 不提供在内存中不再需要某个对象时调用方法的机制(Java 语音中的终结器),但内联 lambda 很容易实现机制,类似于 C++ 中的 RAII。例如,如果您想确定某些资源在离开特定范围后总是被释放,您可以这样做:

class Resource {
  fun take() = println("took")
  fun free() = println("freed")
}

inline fun withResource(resource: Resource, body: () -> Unit) =
 try {
   resource.take()
   body()
 } finally {
   resource.free()
 }

fun main(args: Array<String>) {
   withResource(Resource()) { 
       println("body") 
   }
}
于 2017-06-26T07:45:59.540 回答