mydata.clear()
очищает данные в map
. map
, как вы его определили, хранит std::vector<int>
по значению; природа значения гарантирует, что деструктор вектора вызывается, а его содержимое и выделенная память также очищаются.
От cppreference;
Удаляет все элементы из контейнера. Недействительные ссылки, указатели или итераторы, ссылающиеся на содержащиеся элементы.
vector
's destructor, в свою очередь, управляет своими ресурсами;
Уничтожает контейнер. Вызывается деструкторы элементов, и используемое хранилище освобождается. Обратите внимание, что если элементы являются указателями, объекты с указателем не уничтожаются.
Правило большого пальца - это то, что контейнер будет управлять ресурсами контейнера; память, размер, распределения и т. д., а значения в контейнере должны управлять своими ресурсами по очереди. Этот подход и технология управления ресурсами обычно известны как RAII и многие считают, что это идиоматический C++.
Ваша карта хранит вектор по значению, поэтому, когда вы вызываете clear(), эти векторы исчезнут (их деструкторы будут вызываться). Сначала их не нужно очищать вручную. –