LINUX.ORG.RU

История изменений

Исправление zurg, (текущая версия) :

Ага, и компилятор в годболте тоже несёт чушь.

а понять статически, где оно заканчивается невозможно.

можно!!, енжой аффиные типы.

Оператор if и мув в функцию use_s гарантируют что объект поглотится и уничтожиться в ней и нигде больше его не будет и можно спокойно вызывать деструктор, или же он останется в скоупе fun() то же самое с деструктором уже в ней.

а вот если сделать так

pub fn fun(fl:bool)  {
    let s = Box::new(S(777));
    if fl { 
        use_s(s);
    }
    s.p();
}

гарантировать однозначно уникальность вызова деструктора невозможно и будет ошибка компиляции

Исходная версия zurg, :

Ага, и компилятор в годболте тоже несёт чушь.

а понять статически, где оно заканчивается невозможно.

можно!!, енжой аффиные типы.

Оператор if и мув в функцию use_s гарантируют что объект поглотится и уничтожиться в ней и нигде больше его не будет и можно спокойно вызывать деструктор, или же он останется в скоупе fun() то же самое с деструктором уже в ней.

а вот если сделать так

pub fn fun(fl:bool)  {
    let s = Box::new(S(777));
    if fl { 
        use_s(s);
    }
    s.p();
}

гарантировать однозначно уникальность вызова деструктора, невозможно и будет ошибка компиляции