Будет ли перемещение карты внутри объекта вызывать утечку памяти?C++

Программы на C++. Форум разработчиков
Anonymous
Будет ли перемещение карты внутри объекта вызывать утечку памяти?

Сообщение Anonymous »

У меня есть общий класс коллекции, который является оберткой поверх различных типов данных.
В этой функции пересечения я создал новый объект, чтобы избежать использования карты::erase() в качестве небольшой оптимизации, поскольку стирание просто сделает недействительными итераторы в карте и ссылках, но распределение памяти останется прежним. После этого я в основном делаю несколько копий объекта GenericCollection и хочу избежать повторного копирования всего блока памяти.

Код: Выделить всё

class GenericCollection {
private:
std::unordered_map data_;

public:
// ... add, remove member functions

bool contains(const CollectionTypeObj& key) {
return data_.contains(key);
}

GenericCollection& intersect(const GenericCollection& rhs) {
std::unordered_map intersection;

for (auto it = data_.begin(); it != data_.end(); ++it) {
if (rhs.contains(it->first)) {
intersection[it->first] = it->second;
}
}

data_ = std::move(intersection);
return *this;
}
}
Что происходит в этой реализации с памятью, ранее назначенной карте data_, когда я перемещаю туда новый объект? Создаю ли я утечку памяти, когда назначаю объект пересечения внутренней карте класса?

Подробнее здесь: https://stackoverflow.com/questions/797 ... emory-leak

Вернуться в «C++»