A small crate for handling resources that must be consumed at the end of their lifetime.
Since Rust's type system is affine rather than linear, Drop::drop mutably borrows self,
rather than consuming it. For the most part, this is fine, but for some cases (such as working
with the crate gfx_hal) resources must be consumed on drop. This crate and the
dispose_derive crate serve to cover the typical boilerplate for such cases by managing the
ManuallyDrop wrapper for you. (See the Dispose derive macro for more info on that)
As a bonus, this crate makes it easy to defer the execution of an FnOnce closure to the end
of a scope, which can be done using the defer function.
NOTE: The Dispose trait does not provide a Drop impl by itself. For that, a value
implementing Dispose must be wrapped in a Disposable struct.
Examples
use ;
;
// prints "Goodbye, world!"
As a design consideration, values implementing Dispose should always be returned wrapped in
Disposable or any other wrapper properly implementing Drop. Disposable is recommended as
it contains an unsafe leak function to retrieve the inner value, if necessary.
use ;
// secret is properly disposed at the end of the scope
// .dispose() was not called - data has been leaked!
(My lawyers have advised me to note that the above example is not cryptographically secure. Please do not clean up secure memory by simply setting it to zero.)