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

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

Восстановить пароль Регистрация
 
Penoplast
3 / 3 / 1
Регистрация: 14.09.2012
Сообщений: 84
21.07.2013, 13:53     Проясните освобождение памяти #1
Допустим есть такой код:
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();
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.07.2013, 13:53     Проясните освобождение памяти
Посмотрите здесь:

C++ Освобождение памяти
резервирование памяти/освобождение памяти для трехмерного массива C++
Освобождение памяти C++
C++ освобождение памяти
с++ Освобождение памяти C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
castaway
Эксперт С++
4848 / 2987 / 368
Регистрация: 10.11.2010
Сообщений: 11,028
Записей в блоге: 10
Завершенные тесты: 1
21.07.2013, 13:59     Проясните освобождение памяти #2
Цитата Сообщение от Penoplast Посмотреть сообщение
Надо ли проходить по списку coord_list и вручную очищать поля элементов?
Это следует делать только в том случае, если ты заново хочешь заполнить список, перед этим удалив все элементы.
Penoplast
3 / 3 / 1
Регистрация: 14.09.2012
Сообщений: 84
21.07.2013, 14:05  [ТС]     Проясните освобождение памяти #3
А в чем отличие? То есть почему не надо делать первый раз а остальные вручную чистить?
castaway
Эксперт С++
4848 / 2987 / 368
Регистрация: 10.11.2010
Сообщений: 11,028
Записей в блоге: 10
Завершенные тесты: 1
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?
Penoplast
3 / 3 / 1
Регистрация: 14.09.2012
Сообщений: 84
21.07.2013, 14:35  [ТС]     Проясните освобождение памяти #5
Это просто пример, первое что пришло в голову. На практике смысл переменных другой.

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

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

Не по теме:

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

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

Не по теме:

WUT?

Olivеr
 Аватар для Olivеr
411 / 407 / 13
Регистрация: 06.10.2011
Сообщений: 830
21.07.2013, 16:02     Проясните освобождение памяти #12
Цитата Сообщение от Penoplast Посмотреть сообщение
Надо ли проходить по списку coord_list и вручную очищать поля элементов?
нет конечно
clear() всего то вызывает деструкторы для всех элементов в векторе и не освобождает память (этим занимается деструктор)
при уничтожении coord запустятся деструкторы для всех членов класса
castaway
Эксперт С++
4848 / 2987 / 368
Регистрация: 10.11.2010
Сообщений: 11,028
Записей в блоге: 10
Завершенные тесты: 1
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.
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 не освобождает. Я то думал реализации одинаковые)

Penoplast
3 / 3 / 1
Регистрация: 14.09.2012
Сообщений: 84
21.07.2013, 16:19  [ТС]     Проясните освобождение памяти #15
То есть я могу не заботиться о векторах x,y,z и смело делать так:
C++ (Qt)
1
coord_list.clear();
?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.07.2013, 16:20     Проясните освобождение памяти
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
Olivеr
 Аватар для Olivеr
411 / 407 / 13
Регистрация: 06.10.2011
Сообщений: 830
21.07.2013, 16:20     Проясните освобождение памяти #16
Penoplast, да
Yandex
Объявления
21.07.2013, 16:20     Проясните освобождение памяти
Ответ Создать тему
Опции темы

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