История изменений
Исправление 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();
}
гарантировать однозначно уникальность вызова деструктора, невозможно и будет ошибка компиляции