Я использую gfx-hal
, что требует от меня создания ресурсов, которые должны быть явно уничтожены с использованием функций, специфичных для их типа. Я хотел бы хранить экземпляры этих типов в структурах, и я также хотел бы связать очистку их до времени существования структуры-владельца вместо того, чтобы управлять их временем жизни вручную и потенциально иметь объекты в графическом процессоре / в драйвере в режиме реального времени. навсегда.
Однако все функции семейства функций destroy
принимают тип напрямую, а не как ссылку, поэтому при попытке передать их из своих структур я получаю ошибки, подобные следующим:
error[E0509]: cannot move out of type `S`, which implements the `Drop` trait
--> src/lib.rs:9:18
|
9 | destroyT(self.member)
| ^^^^^^^^^^^ cannot move out of here
Кажется, должен быть какой-то способ обойти эту проблему, так как я в настоящее время нахожусь в самой функции Drop::drop
, поэтому self
уже "потребляется". Как я могу получить экземпляры этих типов из self
как T
, а не &T
?
struct T;
struct S {
member: T,
}
impl Drop for S {
fn drop(&mut self) {
destroyT(self.member)
}
}
// elsewhere, in a library
fn destroyT(t: T) {
//...
}