在 Common Lisp 中销毁结构或类



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

从记忆中"清除"结构的方法是什么?像(setq my-struct NIL)这样的事情浮现在脑海中,但我不确定这是否是最干净的方法?

编辑:

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

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

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

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

test---函数 eq、eql、等于或等于之一的指示符。默认值为 eql。 http://www.lispworks.com/documentation/HyperSpec/Body/f_mk_has.htm

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

用户无法从内存中"清除"对象。释放内存并"清除"这是垃圾收集器的目的。

人们可以使用终结器的非标准机制,它允许在垃圾回收即将销毁对象时安排操作。

在类似琐碎垃圾的东西中看到"最终确定">

最新更新