старого HashMap память? Или нет смысла заморачиваться об этом?
Или вот так будет достаточно?
let mut state = {
let capacity = state.capacity();
drop(state);
HashMap::with_capacity(capacity)
};
если количество элементов известно, то можно попробовать, а так можно не заморачиваться. У тебя state только в этой функции используется? Ты ведь ее возвращаешь я так понимаю
А зачем нужен drop(state) если под капотом компилятор это делает сам?
state.clear() будет использовать выделенную память (для вектора точно, для HashSet не уверен, но скорее всего)
state нужен только как кеш для get_state. При этом capacity да - заранее известно. На втором вызове ровно столько же данных будет (скорее всего)
я не был уверен на счёт момента освобождения той памяти, по тому вызвал дроп заранее)
Для HashMap & HashSet clear() будет использовать выделенную память - это точно. Ну по крайней мере в текущей реализации
Если он нужен только как кеш и все равно его придется дропать, то почему бы теперь его не пихнуть внутрь get_state?
Компилятор всегда дропает значения, когда переменная выходит из области видимости
Всмысле "внутрь"?
Если его пихнуть внутрь get_state то код будет даже чище. Хотя все равно бы работающий код. Может есть лучшее решение
Ну вообще разумно, так и хотел изначально, но что-то лень было две функции делать)
Обсуждают сегодня