Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.75
FarStar
Заблокирован
#1

Стоит ли очищать в деструкторе std::map , std::vecotor? - C++

07.06.2013, 15:58. Просмотров 1665. Ответов 5
Метки нет (Все метки)

У меня ещё один нубский вопрос
Вот если в классе объявлены мапы и вектора, которые по ходу программы как то заполняются, нужно ли мне в деструкторе класса вызывать clear?

тобишь

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class X 
{
public:
     X();
     ~X();
 
   std::vector<float> DATA1;
   std::map<int,std::string> DATA2;
}
 
//ну не знаю, где нибуть в конструкторе
X::X()
{
    DATA1.push_back(666.666f);
    DATA2[666] = "GO TO HELL";
}
где то в мейне X* x = new X(); а потом delete x;

Так вот, в деструкторе надо всё это дело вычищать посредствам DATA1.clear(); DATA2.clear для избежания утечек памяти?

Или же при унечтожение класса стл объекты сами у себя деструктор как то вызовут ?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.06.2013, 15:58     Стоит ли очищать в деструкторе std::map , std::vecotor?
Посмотрите здесь:

Возможно ли создать контейнер std::map, в котором в качестве значения была бы ссылка на std::map? - C++
Здравствуйте. Возможно ли создать контейнер std::map, в котором в качестве значения была бы ссылка на std map? Например: std::map...

Emplace в std::map. Как добавить элемент в std::map без копирования? - C++
здравствуйте... есть ли способ не писать так: std::map&lt;int, char&gt; ksa; ksa.emplace(std::piecewise_construct, ...

std::map, std::vector и порядок обхода коллекции - C++
Здравствуйте, уважаемые! Вопрос следующий - если я сохраняю какие-то значения в map или вектор, то всегда ли я буду получать тот-же...

Потокобезопасность std::map::end, std::list::end - C++
Собсна сабж, могу ли я без синхронизаций выполнять подобного рода код if (myIter != map.end()) // != list.end() {...} myIter =...

STL std::set, std::pair, std::make_pair - C++
Я не знаю как описать тему в двух словах, поэтому не обращайте внимание на название темы. Собственно перейдем к нашим баранам: есть...

Особенности std::map - C++
Добрый день форумчане, хотел спросить такую вещь, сейчас занимаюсь оптимизацией в графическом движке и возникла такая проблемма, хочу...

std::map не компилируется - C++
Всем здравствуйте. Возникла проблема при попытке использования std::map в visual studio 2010. при подключении файла &lt;map&gt; и объявлении...

Std::map::emplace - C++
То ли я туплю/криво поставил компилятор, то ли это emplace синтаксис кривой, но... Как использовать emplace применительно к map со...

allocator std::map - C++
Подскажите вопрос, есть тестовое задание: Подскажите где про это почитать и разъясните по-возможности, что это вообще такое...

Размерность std::map - C++
Добрый вечер. Использую тип данных 16 байтовый. Надо записать несколько десятков миллионов расчетов в map &lt;type, type&gt; val; C...

Std::map и key_comp - C++
Есть задача, нужно задать в map класс для сравнения ключей, но классу для сравнения нужен ещё один вспомогательный елемент. Ну вот...

Теоретический вопрос по std::map - C++
Всем привет. Подскажите пожалуйста как std::map резервирует память и как в памяти выглядят его элементы(условно). Те. понятно что вектор -...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ksandro
31 / 31 / 1
Регистрация: 15.04.2011
Сообщений: 81
07.06.2013, 16:13     Стоит ли очищать в деструкторе std::map , std::vecotor? #2
нет, не надо, vector, map и все stl контейнеры автоматически очищаются в своих деструкторах, и при этом вызывают деструкторы всех элементов.

Об очищении стандартных контейнеров стоит думать только если ты в них хранишь указатели, но это уже немного о другом.
monolit
185 / 184 / 22
Регистрация: 24.03.2011
Сообщений: 665
Завершенные тесты: 1
07.06.2013, 16:14     Стоит ли очищать в деструкторе std::map , std::vecotor? #3
неа, там все само очистится (свои деструкторы когда сработают)....
MrGluck
Модератор
Эксперт CЭксперт С++
6984 / 4155 / 593
Регистрация: 29.11.2010
Сообщений: 11,021
07.06.2013, 16:19     Стоит ли очищать в деструкторе std::map , std::vecotor? #4
FarStar, стоит, если они содержат динам. память,
например, когда храните в них указатели на объект.
Обходите циклом по коллекции и освобождаете память. Сам объект вектор/мап удалять нет необходимости.
В вашем примере для освобождения ресурсов делать вообще ничего не надо.

Добавлено через 30 секунд
Цитата Сообщение от FarStar Посмотреть сообщение
унечтожение
а-та-та

Добавлено через 41 секунду
Цитата Сообщение от FarStar Посмотреть сообщение
унечтожение класса
(а-та-та)^2 класс не уничтожается, уничтожаются его экземпляры (объекты класса)
FarStar
Заблокирован
07.06.2013, 16:21  [ТС]     Стоит ли очищать в деструкторе std::map , std::vecotor? #5
всем по плюсу
MrGluck
Модератор
Эксперт CЭксперт С++
6984 / 4155 / 593
Регистрация: 29.11.2010
Сообщений: 11,021
07.06.2013, 16:25     Стоит ли очищать в деструкторе std::map , std::vecotor? #6
Банальная проверка:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
#include <vector>
 
class A
{
    public:
        A()          { std::cout << "A()\n";   }
        A(const A &) { std::cout << "A(A&)\n"; }
        ~A()         { std::cout << "~A()\n";  }
};
 
int main()
{
    std::vector<A> v(3), v2(v);
}
Yandex
Объявления
07.06.2013, 16:25     Стоит ли очищать в деструкторе std::map , std::vecotor?
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru