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

Освобождение памяти - C++

Восстановить пароль Регистрация
 
NEvOl
12 / 11 / 0
Регистрация: 13.08.2012
Сообщений: 616
26.04.2014, 23:27     Освобождение памяти #1
Маленький вопросик, как правильно освобождать память выделенную под vector<...>, деструктором ~vector() или методом clear() ?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.04.2014, 23:27     Освобождение памяти
Посмотрите здесь:

C++ Освобождение памяти
C++ Освобождение памяти
Освобождение памяти C++
C++ освобождение памяти
с++ Освобождение памяти C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11845 / 6824 / 771
Регистрация: 27.09.2012
Сообщений: 16,919
Записей в блоге: 2
Завершенные тесты: 1
26.04.2014, 23:29     Освобождение памяти #2
Цитата Сообщение от NEvOl Посмотреть сообщение
Маленький вопросик, как правильно освобождать память выделенную под vector<...>
C++
1
2
3
vector<type> * p = new vector<type>() ;
//...
delete p ;
NEvOl
12 / 11 / 0
Регистрация: 13.08.2012
Сообщений: 616
26.04.2014, 23:39  [ТС]     Освобождение памяти #3
Croessmah, а если просто объявляем вектор так:
C++
1
vector<int> a;
тут нужно освобождать память ? или ее освобождают только когда выделяют оператором new ?
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11845 / 6824 / 771
Регистрация: 27.09.2012
Сообщений: 16,919
Записей в блоге: 2
Завершенные тесты: 1
26.04.2014, 23:43     Освобождение памяти #4
Цитата Сообщение от NEvOl Посмотреть сообщение
тут нужно освобождать память ?
об этом за Вас позаботится деструктор, который будет вызван при уничтожении объекта.
NEvOl
12 / 11 / 0
Регистрация: 13.08.2012
Сообщений: 616
27.04.2014, 00:12  [ТС]     Освобождение памяти #5
Croessmah, а если необходимо заблаговременно освободить память занимаемую объектом ?
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11845 / 6824 / 771
Регистрация: 27.09.2012
Сообщений: 16,919
Записей в блоге: 2
Завершенные тесты: 1
27.04.2014, 00:20     Освобождение памяти #6
Цитата Сообщение от NEvOl Посмотреть сообщение
а если необходимо заблаговременно освободить память занимаемую объектом ?
самим объектом или "элементами" вектора?
NEvOl
12 / 11 / 0
Регистрация: 13.08.2012
Сообщений: 616
27.04.2014, 00:22  [ТС]     Освобождение памяти #7
и тем и другим.
DrOffset
6461 / 3835 / 886
Регистрация: 30.01.2014
Сообщений: 6,630
27.04.2014, 00:32     Освобождение памяти #8
NEvOl, Для элементов есть clear().
Если сам вектор создан с automatic storage duration, т.е. на стеке, то деструктор ему вручную вызывать нельзя, т.к. он все равно вызовется автоматически в конце области видимости (если это сделать вручную заранее, то будет UB связанное с попыткой вызова деструктора для уже разрушенного объекта).

Добавлено через 1 минуту
Если нужно удалять когда хочется, то надо создавать объект как показывал Croessmah тут. В этом случае вся ответственность за время жизни такого объекта на тебе.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.04.2014, 00:33     Освобождение памяти
Еще ссылки по теме:

C++ Освобождение памяти
C++ Освобождение памяти в C++
C++ Освобождение памяти в c++

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

Или воспользуйтесь поиском по форуму:
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11845 / 6824 / 771
Регистрация: 27.09.2012
Сообщений: 16,919
Записей в блоге: 2
Завершенные тесты: 1
27.04.2014, 00:33     Освобождение памяти #9
Цитата Сообщение от NEvOl Посмотреть сообщение
и тем
освободится при разрушении объекта(например, при выходе из функции)
Цитата Сообщение от NEvOl Посмотреть сообщение
и другим.
clear, потом shrink_to_fit (c++11)
или swap с пустым вектором:
C++
1
2
3
4
   std::vector < int > s ( 55 ) ;
   std::cout << s.capacity() << std::endl ;
   {std::vector < int > ().swap(s) ;}
   std::cout << s.capacity() << std::endl ;
Yandex
Объявления
27.04.2014, 00:33     Освобождение памяти
Ответ Создать тему
Опции темы

Текущее время: 15:20. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru