Будет ли перемещение карты внутри объекта вызывать утечку памяти?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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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