Трейт 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 называлась "объектной безопасностью", поэтому этот трейт не является объектно-безопасным.