【问题标题】:Does kotlin-native have destructors?kotlin-native 有析构函数吗?
【发布时间】:2017-11-28 14:15:04
【问题描述】:

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

【问题讨论】:

    标签: kotlin native kotlin-native


    【解决方案1】:

    当前的 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") 
       }
    }
    

    【讨论】:

    • 有计划添加析构函数吗?还是因为 Kotlin 的其他目标无论如何都无法实现这种确定性行为?
    • 目前没有添加通用析构函数的计划。然而,在 Kotlin/Native 中存在的弱引用可以实现一些类似的功能。
    猜你喜欢
    • 2010-09-15
    • 1970-01-01
    • 2017-11-07
    • 2020-04-06
    • 2016-02-20
    • 2018-07-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多