LendingCell is a mutable container that allows you to get an owned reference to the same object. When the owned reference is dropped, ownership returns to the original container.
As opposed to a [std::cell::Cell
] which moves Rust's
ownership rules to runtime, a LendingCell
moves Rust's
lifetime rules to runtime.
The value of a LendingCell
is present at
construction-time, but you can convert it to a
BorrowedCell<T>
by calling [LendingCell::to_borrowed
].
While that BorrowedCell
lives (that is, until it is dropped),
calling [LendingCell::try_get
] will return None
. The
BorrowedCell
has exclusive access to your type, as though you
have a directly owned instance of the T
, and so it is Send
as long as T
is Send. At last, when you drop the BorrowedCell
,
the T
is returned to the LendingCell
.
If you drop your LendingCell
before dropping the BorrowedCell
,
then the T
is dropped at the time you drop the BorrowedCell
.
The invariants that Rust's memory safety rules enforce, like
the single-mutable reference rule, are therefor partially ensured
at compile time (you can't get two mutable references to the
T
), but also partially at runtime (while the BorrowedCell
is active, the LendingCell
behaves as though it is an Option
containing None
.