在搜索答案时,我找到了 this question ,但是没有提到静态生命周期对象。这个答案中提到的方法(在对象上调用 drop()
)可以用于静态生命周期对象吗?
我在想象一个类似链表的情况。您需要(可能)在程序的整个生命周期内保留列表的节点,但是您也可以从列表中删除项目。在程序的整个执行过程中将它们留在内存中似乎很浪费。
谢谢!
最佳答案
没有。 static
的关键在于它是静态的:它在内存中有一个固定地址,不能从那里移动。因此,每个人都可以自由地引用该对象,因为只要程序在执行,它就会一直存在。这就是为什么您只能以 &'static
引用的形式使用 static
并且永远不能声明所有权。
此外,为了节省内存而这样做是没有意义的:对象被烘焙到可执行文件中并在访问时映射到内存。 可能发生的只是操作系统放弃内存映射。然而,由于内存从来没有从一开始就从堆中分配,因此没有任何节省。
您可以做的唯一一件事就是使用不安全的可变访问替换对象。这既危险(因为编译器可以自由地假设对象实际上没有改变)又毫无意义,因为内存无法释放,因为它是可执行文件内存映射的一部分。
关于rust - 有没有办法在 Rust 中删除静态生命周期对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58141569/