createCleaner

Creates a Cleaner object that runs cleanupAction with given resource some time after its deallocation.

@ExperimentalNativeApifun <T> createCleaner(resource: T, cleanupAction: (resource: T) -> Unit): Cleaner(source)

import kotlin.native.ref.createCleaner import kotlin.native.concurrent.gc import kotlin.native.concurrent.ExperimentalNativeApi

@ExperimentalNativeApi fun main() { class Resource(val name: String) { fun close() = println("$name closed") }

var resource: Resource? = Resource("MyResource")
val cleaner = createCleaner(resource!!) { r -> r.close() }

println("Using ${resource!!.name}")

// Drop the only strong reference to the resource
resource = null

// Force a GC cycle to trigger the cleaner
gc()

}

Source