根据Rust Book中的这一章节,通过创建指针循环,可能会导致内存泄漏:
Rust的内存安全保证使得意外创建永远不会被清理的内存(称为内存泄漏)变得困难,但并非不可能。与在编译时禁止数据竞争相同,完全防止内存泄漏不是Rust所保证的,这意味着在Rust中内存泄漏是内存安全的。我们可以使用
存在替代方案,例如“弱指针”,可以创建自引用结构,但在删除时仍然可以清除它们。实际上,在该章节后面建议使用
为什么Rust认为这是安全的?为什么这是一种语言没有做任何事情防止“糟糕的程序员行为”的情况?
Rust的内存安全保证使得意外创建永远不会被清理的内存(称为内存泄漏)变得困难,但并非不可能。与在编译时禁止数据竞争相同,完全防止内存泄漏不是Rust所保证的,这意味着在Rust中内存泄漏是内存安全的。我们可以使用
Rc<T>
和RefCell<T>
来查看Rust允许内存泄漏:可以创建引用,其中项彼此引用形成循环。这会导致内存泄漏,因为循环中每个项目的引用计数永远不会达到0,并且值永远不会被删除。存在替代方案,例如“弱指针”,可以创建自引用结构,但在删除时仍然可以清除它们。实际上,在该章节后面建议使用
Weak<T>
。为什么Rust认为这是安全的?为什么这是一种语言没有做任何事情防止“糟糕的程序员行为”的情况?