Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
3 / 3 / 0
Регистрация: 14.09.2012
Сообщений: 84
1

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

21.07.2013, 13:53. Показов 1444. Ответов 15
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Допустим есть такой код:
C++ (Qt)
1
2
3
4
5
6
typedef struct COORDINATE
{
   QVector<int> x;
   QVector<int> y;
   QVector<int> z;
} Coordinate;
C++ (Qt)
1
2
3
4
public:
   void SaveCoord();
private:
   QList<Coordinate> coord_list;
C++ (Qt)
1
2
3
4
5
6
7
8
void SomeClass::SaveCoord()
{
   Coordinate tmp;
   
   // Далее мы инициализируем поля структуры tmp;
 
   coord_list.push_back(tmp);
}

Надо ли проходить по списку coord_list и вручную очищать поля элементов?
C++ (Qt)
1
2
3
4
5
6
Coordinate coord;
foreach (coord, coord_list) {
   coord.x.clear();
   coord.y.clear();
   coord.z.clear();
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
21.07.2013, 13:53
Ответы с готовыми решениями:

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

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

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

Освобождение памяти
Добрый день. Подскажите пожалуйста, почему возникает ошибка при уничтожение массива class...

15
Эксперт С++
4985 / 3092 / 456
Регистрация: 10.11.2010
Сообщений: 11,169
Записей в блоге: 10
21.07.2013, 13:59 2
Цитата Сообщение от Penoplast Посмотреть сообщение
Надо ли проходить по списку coord_list и вручную очищать поля элементов?
Это следует делать только в том случае, если ты заново хочешь заполнить список, перед этим удалив все элементы.
0
3 / 3 / 0
Регистрация: 14.09.2012
Сообщений: 84
21.07.2013, 14:05  [ТС] 3
А в чем отличие? То есть почему не надо делать первый раз а остальные вручную чистить?
0
Эксперт С++
4985 / 3092 / 456
Регистрация: 10.11.2010
Сообщений: 11,169
Записей в блоге: 10
21.07.2013, 14:10 4
Цитата Сообщение от Penoplast Посмотреть сообщение
А в чем отличие?
Между чем?
Вообще странно что у тебя лист векторов трех координат. Не логично.
Обычно делают так:
C++
1
2
3
4
5
struct coordinate {
    int x, y, z;
};
 
QList <coordinate> coord_list;
Или заместо QList - QVector. Зачем тебе вообще использовать вектор в структуре Coordinate?
0
3 / 3 / 0
Регистрация: 14.09.2012
Сообщений: 84
21.07.2013, 14:35  [ТС] 5
Это просто пример, первое что пришло в голову. На практике смысл переменных другой.

Добавлено через 4 минуты
Цитата Сообщение от lazybiz Посмотреть сообщение
Между чем?
Я список очищаю много раз, и какая разница между первым и сотым очищением? Или я не правильно что-то понял.

Цитата Сообщение от lazybiz Посмотреть сообщение
Вообще странно что у тебя лист векторов трех координат. Не логично.
Это просто пример, первое что пришло в голову. На практике смысл переменных и названия другие.
0
Эксперт С++
4985 / 3092 / 456
Регистрация: 10.11.2010
Сообщений: 11,169
Записей в блоге: 10
21.07.2013, 14:39 6
Цитата Сообщение от Penoplast Посмотреть сообщение
Надо ли проходить по списку coord_list и вручную очищать поля элементов?
Я не так начал.. Очищать для чего? Зачем? Что ты хочешь дальше с ним (вектором) делать?
0
3 / 3 / 0
Регистрация: 14.09.2012
Сообщений: 84
21.07.2013, 15:02  [ТС] 7
Цитата Сообщение от lazybiz Посмотреть сообщение
Очищать для чего?
Я имел ввиду освобождать память вручную.
0
Эксперт С++
4985 / 3092 / 456
Регистрация: 10.11.2010
Сообщений: 11,169
Записей в блоге: 10
21.07.2013, 15:02 8
Цитата Сообщение от Penoplast Посмотреть сообщение
Я имел ввиду освобождать память.
Освобождать для чего?
0
3 / 3 / 0
Регистрация: 14.09.2012
Сообщений: 84
21.07.2013, 15:16  [ТС] 9
Цитата Сообщение от lazybiz Посмотреть сообщение
Освобождать для чего?
Что бы не было утечек памяти.
0
castaway
21.07.2013, 15:19
  #10

Не по теме:

Я не знаю как тебе объяснить, ты "непробиваемый"...

0
Penoplast
21.07.2013, 15:58  [ТС]
  #11

Не по теме:

WUT?

0
415 / 411 / 95
Регистрация: 06.10.2011
Сообщений: 832
21.07.2013, 16:02 12
Цитата Сообщение от Penoplast Посмотреть сообщение
Надо ли проходить по списку coord_list и вручную очищать поля элементов?
нет конечно
clear() всего то вызывает деструкторы для всех элементов в векторе и не освобождает память (этим занимается деструктор)
при уничтожении coord запустятся деструкторы для всех членов класса
0
Эксперт С++
4985 / 3092 / 456
Регистрация: 10.11.2010
Сообщений: 11,169
Записей в блоге: 10
21.07.2013, 16:06 13
Цитата Сообщение от Olivеr Посмотреть сообщение
и не освобождает память
ну как же
void QVector::clear()
Removes all the elements from the vector and releases the memory used by the vector.
0
Olivеr
21.07.2013, 16:09
  #14

Не по теме:

Цитата Сообщение от lazybiz Посмотреть сообщение
void QVector::clear()
Removes all the elements from the vector and releases the memory used by the vector.
А std::vector не освобождает. Я то думал реализации одинаковые)

0
3 / 3 / 0
Регистрация: 14.09.2012
Сообщений: 84
21.07.2013, 16:19  [ТС] 15
То есть я могу не заботиться о векторах x,y,z и смело делать так:
C++ (Qt)
1
coord_list.clear();
?
0
415 / 411 / 95
Регистрация: 06.10.2011
Сообщений: 832
21.07.2013, 16:20 16
Penoplast, да
1
21.07.2013, 16:20
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.07.2013, 16:20
Помогаю со студенческими работами здесь

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru