Получился очень загруженный месяц. Чтобы не уходить в новый с одним постом закидываю второй😂
0. C++26 — прогресс и новинки от ISO C++.
1. На reddit есть тред про то, как сложно заставить вектор освободить память.
Давайте предположим, что у нас есть какой-то вектор с данными. Мы хотим его почистить.
Естественным желанием будет вызвать
clear(). Но clear() только установит size_ в ноль (ну конечно ещё почистит объекты). Это в целом логично и естественно, т.к. помогает писать более производительный код. operator= тоже не чистит память. Например можно глянуть на __assign_with_size (одна из веток в операторе копирования). Ну можно ещё попробовать
shrink_to_fit(). И хотя обычно компиляторы честно чистят ненужную память, стандарт говорит, что это non-binding метод (i.e. необязательный). С другой стороны, ну говорит и говорит. Компиляторы обычно чистят, значит норм. Стопроцентным вариантом будет просто присвоить пустой вектор:
vec = std::vector<T>{};Ну или деструктор явно позвать🥳
> Пока копался c вектором, обнаружил новый метод в
std::list: prepend_range (C++23). В других контейнерах подобные тоже подъехали. 2. [видео] Eric Landström: The bugs I remember.
3. Core Guidelines are not Rules.
4. И выцепил пару пропозалов из февральской рассылки:
- inplace_vector
- std::constexpr_v
- std::unitialized<T>
==============================
Там выходит C++Russia 2023 на ютубчик. Не хочу выкладывать по докладу. Подождём ещё какое-то время, пока появятся все доклады, которые мне понравились, и закину пачкой.