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

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

Войти
Регистрация
Восстановить пароль
 
 
Penoplast
3 / 3 / 1
Регистрация: 14.09.2012
Сообщений: 84
#1

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

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

Допустим есть такой код:
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
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.07.2013, 13:53
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Проясните освобождение памяти (C++):

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

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

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

Освобождение памяти - C++
Добрый день. Подскажите пожалуйста, почему возникает ошибка при уничтожение массива class MyClass { public: int *data; int...

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

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

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

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

Цитата Сообщение от lazybiz Посмотреть сообщение
Вообще странно что у тебя лист векторов трех координат. Не логично.
Это просто пример, первое что пришло в голову. На практике смысл переменных и названия другие.
0
castaway
Эксперт С++
4884 / 3020 / 370
Регистрация: 10.11.2010
Сообщений: 11,078
Записей в блоге: 10
Завершенные тесты: 1
21.07.2013, 14:39 #6
Цитата Сообщение от Penoplast Посмотреть сообщение
Надо ли проходить по списку coord_list и вручную очищать поля элементов?
Я не так начал.. Очищать для чего? Зачем? Что ты хочешь дальше с ним (вектором) делать?
0
Penoplast
3 / 3 / 1
Регистрация: 14.09.2012
Сообщений: 84
21.07.2013, 15:02  [ТС] #7
Цитата Сообщение от lazybiz Посмотреть сообщение
Очищать для чего?
Я имел ввиду освобождать память вручную.
0
castaway
Эксперт С++
4884 / 3020 / 370
Регистрация: 10.11.2010
Сообщений: 11,078
Записей в блоге: 10
Завершенные тесты: 1
21.07.2013, 15:02 #8
Цитата Сообщение от Penoplast Посмотреть сообщение
Я имел ввиду освобождать память.
Освобождать для чего?
0
Penoplast
3 / 3 / 1
Регистрация: 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
Olivеr
412 / 408 / 13
Регистрация: 06.10.2011
Сообщений: 831
21.07.2013, 16:02 #12
Цитата Сообщение от Penoplast Посмотреть сообщение
Надо ли проходить по списку coord_list и вручную очищать поля элементов?
нет конечно
clear() всего то вызывает деструкторы для всех элементов в векторе и не освобождает память (этим занимается деструктор)
при уничтожении coord запустятся деструкторы для всех членов класса
0
castaway
Эксперт С++
4884 / 3020 / 370
Регистрация: 10.11.2010
Сообщений: 11,078
Записей в блоге: 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.
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
Penoplast
3 / 3 / 1
Регистрация: 14.09.2012
Сообщений: 84
21.07.2013, 16:19  [ТС] #15
То есть я могу не заботиться о векторах x,y,z и смело делать так:
C++ (Qt)
1
coord_list.clear();
?
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.07.2013, 16:19
Привет! Вот еще темы с ответами:

Освобождение памяти - C++
Маленький вопросик, как правильно освобождать память выделенную под vector&lt;...&gt;, деструктором ~vector() или методом clear() ?

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

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

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


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
21.07.2013, 16:19
Ответ Создать тему
Опции темы

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