如何在 Kotlin 中删除对象?

3

我有一个类和两个对象。我想删除第一个对象。我该如何删除它?

我尝试使用delete()(我在kotlinlangcom上找到了它),但它不起作用。我看到红色的灯泡建议:“创建成员函数Person.delete”,“重命名引用”和“创建扩展函数Person.delete”。

fun main() {
    // copy object in object
    data class Person (var name: String = "Orig", var type: String = "piece",
                       var age: Int = 18, var high: Double = 25.7, var code: Int = 1522)
    {
        var info: String = "0"
        get() = "Name: $name Age: $age Type: $type High: $high Code: $code"
    }
    val ann: Person = Person("Ann", "man", 10, 0.5, 1408) // 1st object with some properties
    var bob: Person = Person("Bob", "girl", 20, 15.0, 1239) // 2nd object without prop
    println(ann.info)// props 1st object
    println(bob.info)// props 2nd object
    print(" ---- ")
    bob = ann.copy() // copy 1st in 2nd
    println("Bob has Anns' props: ")
    print("final " + bob.info) // new props 2nd object
    bob.delete()

}

1
delete是一个在编程中常用的关键字,它用于释放动态分配的内存空间。当我们使用new操作符来创建对象或数组时,需要手动使用delete来释放这些内存空间,以防止内存泄漏。delete关键字可以用于释放单个对象或整个数组的内存。它是C++语言中的一个特性,用于管理内存的分配和释放。 - undefined
1
你是想要从内存中删除它吗? - undefined
Kotlin处理内存中的变量引用,因此开发人员无法控制。我猜你想要的是bob = null(当bob可为空时)。 - undefined
Kotlin不同于C++,在内存中无法完全控制对象的生命周期。Kotlin是基于JVM运行的,这意味着它自带垃圾回收器。垃圾回收器会自动清理堆中未使用的对象,前提是这些对象已经无法被任何其他对象访问到(不包括弱引用/软引用)。 - undefined
1个回答

2
你不需要像 C++/C 等其他语言一样考虑删除对象……如果你使用 Kotlin with JVM,JVM 的垃圾回收器会处理它。
你只需要知道不要在对象上保留引用即可。所以,如果你有一个集合(list、map等),你需要将对象放入其中,也必须将其取出,如果该集合是长期存在的类(如模型)的属性……这是 Kotlin 中可能遇到问题的唯一方式,即将引用放入由静态或长期存在的对象引用的集合中。
在函数内部创建的对象无需手动删除。请记住,垃圾回收器(GC)不会立即在方法完成后运行。根据对象的年龄和垃圾回收器本身,有不同的策略。如果你想看到 GC 的操作,这个工具(visualgc)https://www.oracle.com/technetwork/java/visualgc-136680.html 有一些非常好的可视化效果。
你还可以在这里找到有关垃圾回收的更多详细信息:https://www.oracle.com/webfolder/technetwork/tutorials/obe/java/gc01/index.html

谢谢。我刚刚试图理解深拷贝(deepcopy)和浅拷贝(copy)。如果Kotlin在JVM上运行,那么我如何进行对象的深拷贝,或者我是否不需要它?或者我只能对某些内容进行深拷贝吗?我尝试在Google上找到相关信息,但没有找到任何结果。你能帮助我吗? - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接