Показать сообщение отдельно
  #51 (permalink)  
Старый 24.07.2015, 21:45
Аватар для kobezzza
Быдлокодер;)
Отправить личное сообщение для kobezzza Посмотреть профиль Найти все сообщения от kobezzza
 
Регистрация: 19.11.2010
Сообщений: 4,338

Разбирался со временами жизни указателей, в итоге понял написав такой код:

// Наша функция принимает 2 параметра-ссылки типа int32
// и возвращает кортеж из этих значений, причём первое значение будет увеличено на 1
fn foo<'a, 'b>(i: &'a mut i32, j: &'b i32) -> (&'a i32, &'b i32) {
    *i += 1;
    (i, j)
}

fn main() {
    let mut x1 = 5;
    let res;

    {
        // Сохраняем в res значение .0
        res = foo(&mut x1, &mut 3).0;
    }

    // Всё ок, 6, т.к. время жизни первого параметра foo совпадает с x1,
    // а вот элемент .1 мы бы не смогли сохранить, т.к. его время жизни другое
    // и он удалится из памяти при выходе из блока 20-23
    println!("{}", res);
}


Думаю, будет полезно изучающим Rust.
__________________
kobezzza
code monkey
Ответить с цитированием