Loo
эта функция не заменяет дроп кототрый делает компилятор, это просто хук
Berkus
тогда мне вот что интересно
Loo
ещё раз скопирую: After this function is over, the memory of self will be deallocated.
Berkus
(для Arc<>) если Drop::drop считает счетчик и делает return, то и Shared<куда-тотам> тоже дропается
Berkus
хмхмхм
Berkus
Ivan
Ага, читаю
Ivan
То есть оба вызовется деструктор и дроп?
Berkus
сначала дроп, потом деаллок
Berkus
то есть все твои переменные дропнутся в ЛЮБОМ случае
Ivan
Это хорошо
Berkus
а в drop() можно сделать дополнительные действия типа закрытия сокета
Ivan
Освободить ресурс то есть) как и в с++
Berkus
ну если представить c++ класс который содержит или только примитивные типы или unique_ptr то примерно то же самое получится
Ivan
Не, он же деструктор объектов включенных в композицию классов тоже вызовет
Loo
это считается "идиоматичным"
Ivan
struct C { A a; B b; };
{
C c;
}
В расте же вызовется Drop для а и b?
Loo
Loo
в конце скоупа вызовется дроп для C
Filipp
Есть mem::forget
Filipp
Который не заставляет не вызывать дроп
Ivan
А если у них нет трейта дроп
Berkus
Berkus
изич
Ivan
Стоп, но ресурсы они захватили. Как освобождать?
Berkus
если они захватили ресурсы - они обязаны реализовать Drop
Loo
не нужно для них реализоывывать Drop
Berkus
мне кажется, все таки надо
Loo
Berkus
у тсп сокета реализован дроп
еще раз. Некий абстрактный класс А реализует захват какого-то ресурса, не нужно реализовывать ему Drop? почему?
Berkus
tcp socket был для примера
Loo
нету в расте классов
Berkus
такого ресурса
Berkus
да блин
Loo
тем более абстрактных
Loo
о чём вы
Filipp
Он сам дропнется
Ivan
Видимо у них не так просто ресурс захватить))д
Filipp
Berkus
я вижу отстутствие абстрактного мышления пока что
Ivan
Berkus
Berkus
для нее не нужно реализовывать Drop? почему?
Loo
можно к конкретике ближе?
Ivan
Чувак пишет умный указатель
Berkus
можно, структ А реализует оберту над _сишным низкоуровневым_ тцп сокетом
Berkus
ему нужен дроп, так?
Ivan
И в деструкоре умного указателя не освобождает память которую обернул
Ivan
Berkus
можно к конкретике ближе?
я не знаю куда конкретнее, вот структ, он захватил ресурс, ты говоришь ему не нужен дроп, почему?
Ivan
Компилятор даст тебе не освободить ресурс?
Berkus
компилятор не знает как его освобождать
Berkus
он не знает как вызвать сишный fcloseresource() чтобы его освободить
Filipp
Вопрос тебе нужен или компилятору нужен
Berkus
вы издеваетесь
Ivan
Ivan
Значит ты как автор библиотеки можешь косячнуть
Loo
мда
Loo
Ivan
Нет, ну серьезно. Нормальный вопрос
Ivan
Арсен ты писал на С++¿
Filipp
Я честно не понял вопрос. Тебе нужен конечно, компилятору для успешной компиляции не нужен, т.к. При создании _сишного_ ресурса ты обязался сам за ним следить и дропать когда надо
Ivan
Вот
Ivan
Далее вопрос
Ivan
В классе С не реализовали Drop
Ivan
Будет ли вызван Drop у А?
Mike
если проводить параллели с шарпами, то Dispose надо руками вызывать у всех подобъектов
Mike
Я думаю в расте тоже
Mike
Руками не вызовешь
Mike
Само не вызовется
Mike
потому что мб дропы А и В зависят от чего-то еще
Mike
и автоматом их звать было бы не круто
Filipp
Если я правильно понял то будет
Berkus
мнэ, вопрос не про то
Filipp
play.rust-lang.org/
Filipp
Может кто-нибудь набрать?