Как можно вернуть структуру, содержащую и ссылку на значение, и само это значение?

Как исправить ошибки "adapters does not live long enough" и "adapters dropped here while still borrowed"?
  • 12 августа 2024 г. 10:33
Ответы на вопрос 2
Для того чтобы вернуть структуру, содержащую и ссылку на значение, и само это значение, можно использовать жизненный цикл (lifetimes) в Rust.

Пример реализации:

```rust
struct Container<'a, T> {
    value: &'a T,
    data: T,
}

fn create_container<'a, T>(value: &'a T, data: T) -> Container<'a, T> {
    Container { value, data }
}

fn main() {
    let value = String::from("Hello");
    let container = create_container(&value, value);

    println!("Value: {}", container.value);
    println!("Data: {}", container.data);
}
```

Чтобы исправить ошибку "adapters does not live long enough" и "adapters dropped here while still borrowed" нужно удостовериться, что время жизни объектов соответствует их использованию.

1. Убедитесь, что адаптеры (adapters) не удаляются до того, как они больше не нужны.
2. Проверьте, что объекты, на которые ссылаются адаптеры, продолжают существовать в течение всего времени использования адаптеров.
У тебя там self referential struct, так что придётся при помощи NonNull указателей сделать и запретить перемещение структуры при помощи PhantomPin. 
Лайфтайма наподобие 'self нету
Похожие вопросы