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

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

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

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

21.07.2013, 13:53. Просмотров 809. Ответов 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();
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.07.2013, 13:53     Проясните освобождение памяти
Посмотрите здесь:

Деструктор: освобождение памяти - C++
Как в этом случае освободить память, запутался помогите пожалуйста. class TClass { public: int a; TClass() { cout &lt;&lt; &quot;Ctor...

Освобождение памяти в списках - C++
#pragma once class Node { public: int value; Node * next; Node(int data); ~Node(); };

Освобождение невыделенной памяти - C++
У меня по коду выполняются такие операторы: index_load = new __int64 *; далее следует delete index_load; И после второго возникает...

Выделение и освобождение памяти - C++
Вот встретился с вопросом какой вариант является более правильным и почему. char *Buffer1 = (char *)malloc(65536) char *Buffer2 =...

Освобождение динамической памяти - C++
После первого вызова функции(при повторном) пишет ошибку. В функции sort один из элементов массива становится недоступным для чтения. Если...

Освобождение динамической памяти в vs - C++
Вообщем попался я тут, и так, код: //#define _CRT_SECURE_NO_WARNINGS добавить в vs #include &lt;iostream&gt; #include &lt;stdlib.h&gt; ...

Освобождение памяти со структурой - C++
Всем привет. Есть структура: struct ClientInfo { const char* szUid; const char* szName; const char* szSurname;

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
castaway
Эксперт С++
4881 / 3017 / 370
Регистрация: 10.11.2010
Сообщений: 11,076
Записей в блоге: 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
Эксперт С++
4881 / 3017 / 370
Регистрация: 10.11.2010
Сообщений: 11,076
Записей в блоге: 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
Эксперт С++
4881 / 3017 / 370
Регистрация: 10.11.2010
Сообщений: 11,076
Записей в блоге: 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
Эксперт С++
4881 / 3017 / 370
Регистрация: 10.11.2010
Сообщений: 11,076
Записей в блоге: 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
412 / 408 / 13
Регистрация: 06.10.2011
Сообщений: 831
21.07.2013, 16:02     Проясните освобождение памяти #12
Цитата Сообщение от Penoplast Посмотреть сообщение
Надо ли проходить по списку coord_list и вручную очищать поля элементов?
нет конечно
clear() всего то вызывает деструкторы для всех элементов в векторе и не освобождает память (этим занимается деструктор)
при уничтожении coord запустятся деструкторы для всех членов класса
castaway
Эксперт С++
4881 / 3017 / 370
Регистрация: 10.11.2010
Сообщений: 11,076
Записей в блоге: 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 не освобождает. Я то думал реализации одинаковые)

MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.07.2013, 16:19     Проясните освобождение памяти
Еще ссылки по теме:

Полиморфизм и освобождение памяти - C++
class A{ // базовый класс ... }; class B : public A{ // унаследованный от класса A ... }; далее в программе: B...

Массив, освобождение памяти - C++
что я сделал не так? #include &quot;stdafx.h&quot; #include &lt;conio.h&gt; #include &lt;stdio.h&gt; #include &lt;math.h&gt; #include &lt;iostream&gt; ...

Освобождение памяти и фишки VS - C++
1) Откуда delete знает, сколько элементов в массиве, ведь обычный sizeof(a), где a - (допустим) int* - ничего не даст? Если &quot;он&quot; это знает,...

Выделение и освобождение памяти - C++
Доброго времени суток. Пишу класс по ООП, и назрел один вопрос, связанный с моментом выделения и освобождения памяти. class SOK { ...

Стек и освобождение памяти - C++
Пишу класс стека, реслизую в виде односвязного списка. stack.h #ifndef STACK_H_INCLUDED #define STACK_H_INCLUDED template &lt;class...


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

Или воспользуйтесь поиском по форуму:
Penoplast
3 / 3 / 1
Регистрация: 14.09.2012
Сообщений: 84
21.07.2013, 16:19  [ТС]     Проясните освобождение памяти #15
То есть я могу не заботиться о векторах x,y,z и смело делать так:
C++ (Qt)
1
coord_list.clear();
?
Yandex
Объявления
21.07.2013, 16:19     Проясните освобождение памяти
Ответ Создать тему
Опции темы

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