Трейт AsyncDrop
#![allow(unused)] fn main() { pub trait AsyncDrop { // Обязательный метод async fn drop(self: Pin<&mut Self>); } }
🔬 Это экспериментальный API, доступный только в ночных сборках. (
async_drop#126482)
Асинхронная версия трейта Drop.
Когда значение больше не нужно, Rust запускает "деструктор" для этого значения. Наиболее распространенный случай, когда значение больше не нужно - это выход из области видимости. Деструкторы могут также запускаться в других обстоятельствах, но в примерах мы сосредоточимся на области видимости. Чтобы узнать о некоторых других случаях, пожалуйста, обратитесь к разделу справочника о деструкторах.
Copy и (Drop|AsyncDrop) являются взаимоисключающими
Вы не можете реализовать одновременно Copy и (Drop|AsyncDrop) для одного и того же типа. Типы, которые являются Copy, неявно дублируются компилятором, что делает очень трудным предсказание того, когда и как часто будут выполняться деструкторы. Как следствие, эти типы не могут иметь деструкторов.
Обязательные методы
#![allow(unused)] fn main() { async fn drop(self: Pin<&mut Self>) }
🔬 Это экспериментальный API, доступный только в ночных сборках. (
async_drop#126482)
Выполняет асинхронный деструктор для этого типа.
Этот метод вызывается неявно, когда значение выходит из области видимости, и не может быть вызван явно.
Когда этот метод вызывается, self еще не был деаллоцирован. Это происходит только после завершения метода.
Совместимость с dyn
Этот трейт не совместим с dyn.
В более старых версиях Rust совместимость с dyn называлась "объектной безопасностью", поэтому этот трейт не является объектно-безопасным.