我有两个复杂对象,它们之间有某种形式的生存期关系。我的目标是消除这种关系,使两个对象完全独立。有没有一种快速的方法来判断是什么导致了对象之间的生存期关系?
cwtwac6a1#
很简单:一个有对另一个的引用。除非涉及到引用,否则生存期并不真正(重要地)涉及到它。如果它们涉及到引用,那么它们的生存期是相关的。如果它们都以某种方式引用同一个第三个对象,它们可能是间接相关的,但这可能不是你的意思。这与C/C中的情况没有什么不同,在C/C中,如果你有一个指向另一个对象的指针,那么它们的生存期是相关的。只是在Rust中,编译器强制你正确地做这件事(除非你使用unsafe,它被称为unsafe是有原因的)。
unsafe
nlejzf6q2#
使用借位检查器。Rust编译器有一个借位检查器,它比较作用域来确定是否所有的借位都是有效的。它将显示其他变量的生存期。更多信息,请访问:https://doc.rust-lang.org/book/ch10-03-lifetime-syntax.html
2条答案
按热度按时间cwtwac6a1#
很简单:一个有对另一个的引用。除非涉及到引用,否则生存期并不真正(重要地)涉及到它。如果它们涉及到引用,那么它们的生存期是相关的。如果它们都以某种方式引用同一个第三个对象,它们可能是间接相关的,但这可能不是你的意思。
这与C/C中的情况没有什么不同,在C/C中,如果你有一个指向另一个对象的指针,那么它们的生存期是相关的。只是在Rust中,编译器强制你正确地做这件事(除非你使用
unsafe
,它被称为unsafe
是有原因的)。nlejzf6q2#
使用借位检查器。Rust编译器有一个借位检查器,它比较作用域来确定是否所有的借位都是有效的。它将显示其他变量的生存期。
更多信息,请访问:https://doc.rust-lang.org/book/ch10-03-lifetime-syntax.html