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

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

Войти
Регистрация
Восстановить пароль
 
NEvOl
19 / 18 / 0
Регистрация: 13.08.2012
Сообщений: 727
#1

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

26.04.2014, 23:27. Просмотров 385. Ответов 8
Метки нет (Все метки)

Маленький вопросик, как правильно освобождать память выделенную под vector<...>, деструктором ~vector() или методом clear() ?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.04.2014, 23:27
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Освобождение памяти (C++):

Резервирование памяти/освобождение памяти для трехмерного массива - C++
Необходимо создать трехмерный массив (A), в котором элементы вдоль направления Z выли бы выровнены по 16 байт. Есть две проблемы: ...

Освобождение памяти - C++
Товарищи,недавно баловался в Microsoft VS,готовился к экзаменам,писал небольшие програмки с использованием динамических массивов.Память под...

Освобождение памяти - C++
Есть класс, в котором я выделяю память с помощью new. В деструкторе класса я с помощью delete освобождаю память, но у меня вылетает ошибка...

Освобождение памяти - C++
#include&lt;iostream&gt; #include&lt;cstring&gt; using namespace std; struct stringy{ char * str; int ct; }; stringy &amp; set(stringy &amp;...

Освобождение памяти - C++
Как сделать, чтобы при вызове деструктора экземпляра i класса image, вызвался и деструктор класса image_bmp? class image { public:...

Освобождение памяти в c++ - C++
Привет, помогите разобраться с освобождением памяти в c++. Я так понимаю, что если освободить память, то переменная удаляется, но почему же...

8
Croessmah
Эксперт CЭксперт С++
13513 / 7671 / 866
Регистрация: 27.09.2012
Сообщений: 18,880
Записей в блоге: 3
Завершенные тесты: 1
26.04.2014, 23:29 #2
Цитата Сообщение от NEvOl Посмотреть сообщение
Маленький вопросик, как правильно освобождать память выделенную под vector<...>
C++
1
2
3
vector<type> * p = new vector<type>() ;
//...
delete p ;
0
NEvOl
19 / 18 / 0
Регистрация: 13.08.2012
Сообщений: 727
26.04.2014, 23:39  [ТС] #3
Croessmah, а если просто объявляем вектор так:
C++
1
vector<int> a;
тут нужно освобождать память ? или ее освобождают только когда выделяют оператором new ?
0
Croessmah
Эксперт CЭксперт С++
13513 / 7671 / 866
Регистрация: 27.09.2012
Сообщений: 18,880
Записей в блоге: 3
Завершенные тесты: 1
26.04.2014, 23:43 #4
Цитата Сообщение от NEvOl Посмотреть сообщение
тут нужно освобождать память ?
об этом за Вас позаботится деструктор, который будет вызван при уничтожении объекта.
1
NEvOl
19 / 18 / 0
Регистрация: 13.08.2012
Сообщений: 727
27.04.2014, 00:12  [ТС] #5
Croessmah, а если необходимо заблаговременно освободить память занимаемую объектом ?
0
Croessmah
Эксперт CЭксперт С++
13513 / 7671 / 866
Регистрация: 27.09.2012
Сообщений: 18,880
Записей в блоге: 3
Завершенные тесты: 1
27.04.2014, 00:20 #6
Цитата Сообщение от NEvOl Посмотреть сообщение
а если необходимо заблаговременно освободить память занимаемую объектом ?
самим объектом или "элементами" вектора?
0
NEvOl
19 / 18 / 0
Регистрация: 13.08.2012
Сообщений: 727
27.04.2014, 00:22  [ТС] #7
и тем и другим.
0
DrOffset
7351 / 4451 / 1009
Регистрация: 30.01.2014
Сообщений: 7,292
27.04.2014, 00:32 #8
NEvOl, Для элементов есть clear().
Если сам вектор создан с automatic storage duration, т.е. на стеке, то деструктор ему вручную вызывать нельзя, т.к. он все равно вызовется автоматически в конце области видимости (если это сделать вручную заранее, то будет UB связанное с попыткой вызова деструктора для уже разрушенного объекта).

Добавлено через 1 минуту
Если нужно удалять когда хочется, то надо создавать объект как показывал Croessmah тут. В этом случае вся ответственность за время жизни такого объекта на тебе.
1
Croessmah
Эксперт CЭксперт С++
13513 / 7671 / 866
Регистрация: 27.09.2012
Сообщений: 18,880
Записей в блоге: 3
Завершенные тесты: 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 ;
1
27.04.2014, 00:33
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.04.2014, 00:33
Привет! Вот еще темы с ответами:

Освобождение памяти в C++ - C++
Добрый день! В моей программе в функции выделяется память (new char) под символьный массив, который является элементом структуры. Это...

Освобождение памяти - C++
Есть многопоточное приложение. Создается глобальная структура: Пример из msdn. typedef struct _MyData { int val1; ...

освобождение памяти - C++
Помогите найти ошибку, программа вилиться когда освобождаю память! Здесь выделения памяти double **CreateArray() { double...

Освобождение памяти - C++
Добрый день. Пишу в рубрику &quot;Вопросы начинающих по С/С++&quot; посему вопрос глупый :) И все же, есть такой код //offset - массив...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

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