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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.67
red_88
6 / 6 / 0
Регистрация: 10.02.2009
Сообщений: 136
#1

Работа с памятью - C++

28.10.2010, 16:08. Просмотров 1168. Ответов 7
Метки нет (Все метки)

Всем доброго времени суток. Почитав данный форум и проч. пришёл к выводу, что мой проект на C# нереален в виду бестолковой работы с памятью. В общем задача такова. Есть класс:
C++
1
2
3
4
5
6
7
8
9
10
11
12
class oAlternativa
{
public:
    oAlternativa(void);
    oAlternativa(int *init,int count);
    virtual ~oAlternativa(void);
    int *Ves;
    int nSize;
    int nFrom;
    int nTo;
    int ID;
};
сейчас в диструкторе написано:
C++
1
2
3
4
oAlternativa::~oAlternativa(void)
{
    if (!Ves==NULL) delete(Ves);
}
Верно ли это и достаточно ли?
Есть ещё один класс:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#pragma once
#include <list>
#include <iostream>
#include <fstream>
using namespace std;
#include "oAlternativa.h"
 
class oUzel
{
private:
    list<oAlternativa> BestWays;
public:
    oUzel(void);
    ~oUzel(void);
    list<oAlternativa> Sources;
    list<oAlternativa> Dests;
    int AddWay(oAlternativa Way);//Добавление к набору BestWays одного из элементов
    int DelWay(int WayID);//Удаление из набора BestWays элемента(ов) у которых ID=WayID
};
Про добавление к набору вопросв нет, а вот как реализовать удаление из набора чтобы память очистить от того, что не нужно? Заранее всем спасибо за ответ.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.10.2010, 16:08     Работа с памятью
Посмотрите здесь:

Работа с памятью - C++
Нужно ривести пример использования операторов new и delete для выделения памяти под двумерный массив и освобождения памяти двумерного...

работа с памятью - C++
Доброго времени суток! У меня возникло затруднение - нужно реализовать на языке Си программу,демонстрирующую распределение памяти таким...

Работа с памятью - C++
Форумчане, доброго времени суток. Заранее извиняюсь за нубские вопросы, но должен разобраться в теме. Суть такова: написал class...

Работа с памятью - C++
Есть приложение,в нем есть label'ы. Есть ли какая-нибудь возможность средствами C++ допустим, перевести эти контролы? Если есть - дайте...

работа с памятью - C++
a) Статическая память. Двумерный массив. Дан массив целых чисел. В массиве есть отрицательные числа. Определить координаты левого нижнего...

Работа с памятью - C++
Добрый день всем. Я только начал изучение C#(раньше работал c: C++ маленько -т.е. общее представление о нем имею) и у меня вопрос, можно...

Работа с памятью - C++
Всем привет! Не могу разобраться, как написать код программы, которая моделирует механизм виртуальной памяти. Кто сможет реализовать хотя...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ForEveR
В астрале
Эксперт С++
7970 / 4732 / 320
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
28.10.2010, 16:12     Работа с памятью #2
red_88, У списка впринципе свой сборщик...
C++
1
2
3
4
oAlternativa::~oAlternativa(void)
{
        if (Ves==0) delete(Ves);
}
Но все зависит от того простой указатель это или же массив... Т.е. идет ли под него выделение памяти под N элементов
Sudoki
124 / 64 / 1
Регистрация: 19.04.2010
Сообщений: 196
28.10.2010, 16:16     Работа с памятью #3
речь шла про удаление из набора.
Я не силен в STL но что то смутно помню надо пользоваться функциями find чтобы найти все значения удовлетворяющие какому то критерию. Затем удалить их из списка.
red_88
6 / 6 / 0
Регистрация: 10.02.2009
Сообщений: 136
28.10.2010, 16:20  [ТС]     Работа с памятью #4
Да, речь идёт о динамическом массиве. Причем его величина не очень велика (до 10), но вот количество объектов oAlternativa скорее всего перевалит за 9 000 000 000.
Sudoki
124 / 64 / 1
Регистрация: 19.04.2010
Сообщений: 196
28.10.2010, 16:27     Работа с памятью #5
Это при малом 8Гб информации.
red_88
6 / 6 / 0
Регистрация: 10.02.2009
Сообщений: 136
29.10.2010, 17:20  [ТС]     Работа с памятью #6
8 Гб оперативки в наличии
Главное чтобы сильно не свопило

Добавлено через 2 часа 3 минуты
Может кто-нибудь подсказать по второму вопросу? Про удаление массива проще,а вот как list'ом пользоваться, для меня тёмный лес после фреймворка.

Добавлено через 22 часа 20 минут
Неужели никто list'ом не пользовался?
ForEveR
В астрале
Эксперт С++
7970 / 4732 / 320
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
29.10.2010, 17:57     Работа с памятью #7
red_88, Список
Конкретно нужно мне кажется вот это:
Remove_if для списка
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.10.2010, 14:49     Работа с памятью
Еще ссылки по теме:

Работа с памятью - C++
Может кто хорошо понимает механизм выделения и освобождения памяти объяснить его, а то я в конец запутался с ним, вот помогал одному...

Работа с памятью в С++ - C++
Здравствуйте. Если я правильно понимаю, то при запуске программы, программе выделяется определенное кол-во памями, которое оно может...

работа с памятью strtok - C++
Подскажите где можно почитать прочитать о том как правильно использовать strtok с максимально простой терминологией и максимально...

Работа с памятью, деструкторы - C++
Добрый день. Прочитал в учебнике, что следующий код (под спойлером) должен четыре раза освобождать s-память. Не понимаю, почему четыре: у...

Работа с основной памятью - C++
Не могу понять как выполнить задание при работе в основной памяти, есть работа с файлами. (а) Прошу помочь. #include &lt;stdio.h&gt; ...


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

Или воспользуйтесь поиском по форуму:
red_88
6 / 6 / 0
Регистрация: 10.02.2009
Сообщений: 136
30.10.2010, 14:49  [ТС]     Работа с памятью #8
Lavroff, а remove_if удаляет только ссылку на объект в листе или сам объект из памяти тоже? Дело в том, что количество удалений будет много больше размерности задачи и если удаляются только ссылки то памяти понадобится ого-го

Добавлено через 1 минуту
что-то должно быть с грамотным вызовом erase, в этом у меня главная проблема

Добавлено через 15 часов 25 минут
Написал таким образом:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#pragma once
#include <list>
using namespace std;
#include "oAlternativa.h"
 
class oUzel
{
public:
    oUzel(void);
    oUzel(int n);
    ~oUzel(void);
    list<oAlternativa> BestWays;
    int num;
    list<oAlternativa> Sources;
    list<oAlternativa> Dests;
    int TryAdd(oUzel Source,oAlternativa way);
    bool del_marck (const oAlternativa& value) { return (value.nFrom==0); }
    int AddWay(oAlternativa Way)//Добавление к набору BestWays одного из элементов
        {   Way.nFrom=1;    BestWays.push_back(Way);    return 1;}
    int DelWay(oAlternativa Way)//Удаление из набора BestWays элемента
        {   Way.nFrom=0;    BestWays.remove_if(del_marck);  return 1;}
};
Но на строку с объявлением функции del_marck выдаёт следующую ругань:
Код
1>c:\users\user\documents\visual studio 2010\projects\mdp\mdp\ouzel.h(21): error C3867: oUzel::del_marck: в вызове функции отсутствует список аргументов; используйте "&oUzel::del_marck" для создания указателя на член
Я так понимаю, функцию надо было объявлять либо вне класса либо как то указать, что поиск ведётся именно по листу BestWays?
Yandex
Объявления
30.10.2010, 14:49     Работа с памятью
Ответ Создать тему
Опции темы

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