data-structures - 在 Common Lisp 中销毁结构或类

标签 data-structures garbage-collection lisp common-lisp

我想知道在 Common Lisp 中销毁通过 defstruct 创建的结构的选项是什么。似乎自动提供了构造函数;但是,析构函数并非如此。

从内存中“清除”结构的方法有哪些?我想到了 (setq my-struct NIL) 之类的东西,但我不确定这是否是最简洁的方法?

编辑:

当我尝试测试如果我使用结构作为键将某些内容键入哈希表然后销毁该结构时会发生什么,问题就出现了。哈希表中的键会发生什么变化?我想这更多的是关于如何实现哈希表的问题。

最佳答案

由于 Common Lisp 是一种动态语言,垃圾收集器将在不再使用(在任何地方引用)时从内存中删除结构。所以是的,当您为结构分配一个名称(即 my-struct),然后将 nil 分配给该名称时,结构将从内存中删除。

当你使用这个结构作为键时,它多了一个引用,所以即使你将nil分配给my-struct,结构也会保留在内存中直到您将其从哈希表中删除。

值得注意的是,make-hash-table 还采用可选的 test 参数:

test---a designator for one of the functions eq, eql, equal, or equalp. The default is eql. http://www.lispworks.com/documentation/HyperSpec/Body/f_mk_has.htm

当您使用结构作为键时,您应该将test设置为equalp

关于data-structures - 在 Common Lisp 中销毁结构或类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52374371/

相关文章:

powershell - 在 Powershell 中,是否有比自定义对象更好的方法来存储/查找 n 维数组中的数据

scala - Scala 中的 Union-Find(或 Disjoint Set)数据结构

c# - using block 是否为 GC 创建和维护引用?

java - 垃圾收集和 JNI 调用

lisp - 如何从 lisp 中的函数返回控制权

c - 不使用tail实现函数

c++ - 模板化优先级队列导致对象成为指针。由 小码哥发布于

c# - 垃圾收集和作用域在 C# 中是如何工作的?

lisp - 普通口齿不清 : flush standard output

LISP 函数,给定一个数字和一个列表,返回第一个大于 n 的偶数