Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/3: Рейтинг темы: голосов - 3, средняя оценка - 5.00
20 / 19 / 1
Регистрация: 13.08.2012
Сообщений: 779
1

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

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

Маленький вопросик, как правильно освобождать память выделенную под vector<...>, деструктором ~vector() или методом clear() ?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.04.2014, 23:27
Ответы с готовыми решениями:

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

Освобождение памяти
Собственно есть простенький класс class Human { public: Human ( ); void...

освобождение памяти
Помогите найти ошибку, программа вилиться когда освобождаю память! Здесь выделения памяти double...

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

8
Don't worry, be happy
16958 / 9839 / 1895
Регистрация: 27.09.2012
Сообщений: 24,394
Записей в блоге: 2
26.04.2014, 23:29 2
Цитата Сообщение от NEvOl Посмотреть сообщение
Маленький вопросик, как правильно освобождать память выделенную под vector<...>
C++
1
2
3
vector<type> * p = new vector<type>() ;
//...
delete p ;
0
20 / 19 / 1
Регистрация: 13.08.2012
Сообщений: 779
26.04.2014, 23:39  [ТС] 3
Croessmah, а если просто объявляем вектор так:
C++
1
vector<int> a;
тут нужно освобождать память ? или ее освобождают только когда выделяют оператором new ?
0
Don't worry, be happy
16958 / 9839 / 1895
Регистрация: 27.09.2012
Сообщений: 24,394
Записей в блоге: 2
26.04.2014, 23:43 4
Цитата Сообщение от NEvOl Посмотреть сообщение
тут нужно освобождать память ?
об этом за Вас позаботится деструктор, который будет вызван при уничтожении объекта.
1
20 / 19 / 1
Регистрация: 13.08.2012
Сообщений: 779
27.04.2014, 00:12  [ТС] 5
Croessmah, а если необходимо заблаговременно освободить память занимаемую объектом ?
0
Don't worry, be happy
16958 / 9839 / 1895
Регистрация: 27.09.2012
Сообщений: 24,394
Записей в блоге: 2
27.04.2014, 00:20 6
Цитата Сообщение от NEvOl Посмотреть сообщение
а если необходимо заблаговременно освободить память занимаемую объектом ?
самим объектом или "элементами" вектора?
0
20 / 19 / 1
Регистрация: 13.08.2012
Сообщений: 779
27.04.2014, 00:22  [ТС] 7
и тем и другим.
0
13892 / 7425 / 1762
Регистрация: 30.01.2014
Сообщений: 12,421
27.04.2014, 00:32 8
NEvOl, Для элементов есть clear().
Если сам вектор создан с automatic storage duration, т.е. на стеке, то деструктор ему вручную вызывать нельзя, т.к. он все равно вызовется автоматически в конце области видимости (если это сделать вручную заранее, то будет UB связанное с попыткой вызова деструктора для уже разрушенного объекта).

Добавлено через 1 минуту
Если нужно удалять когда хочется, то надо создавать объект как показывал Croessmah тут. В этом случае вся ответственность за время жизни такого объекта на тебе.
1
Don't worry, be happy
16958 / 9839 / 1895
Регистрация: 27.09.2012
Сообщений: 24,394
Записей в блоге: 2
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
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.04.2014, 00:33

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Освобождение памяти
Есть многопоточное приложение. Создается глобальная структура: Пример из msdn. typedef struct...

Освобождение памяти
Как сделать, чтобы при вызове деструктора экземпляра i класса image, вызвался и деструктор класса...

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

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


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

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

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