0 / 0 / 0
Регистрация: 20.06.2010
Сообщений: 10

Как освободить память от объектов/текстур?

04.05.2016, 14:07. Показов 1922. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Есть класс некого объекта, который я буду рисовать:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
class Object
{
private:
    float radius;
    char color;
    sf::CircleShape shape;
    sf::String File; // Файл с расширением
    sf::Image image; // SFML изображение
    
    sf::Sprite sprite; // SFML спрайт
public:
    sf::Texture texture; // SFML текстура
    std::map< std::string, sf::Image > images_;
    Object(sf::String _f, float radius, int red, int green, int blue, float x, float y);
    void Set(float radius, int red, int green, int blue);
    void SetP(float x, float y);
    void draw(sf::RenderWindow &window);
    ~Object();
///////////////////////////////////////////////////////////////////////////////////////////////////////////
Object::Object(sf::String _f, float radius, int red, int green, int blue, float x, float y)
{
    shape.setRadius(radius);
//  shape.setFillColor(sf::Color(red, green, blue));
    shape.setPosition(x, y);
    File = _f;
    image.loadFromFile("resources/" + File);
    texture.loadFromImage(image);
    shape.setTexture(&texture);
    shape.setTextureRect(sf::IntRect(0, 0, radius, radius));
 
}
 
void Object::Set(float radius, int red, int green, int blue)
{
    shape.setRadius(radius);
    shape.setFillColor(sf::Color(red, green, blue));
}
 
void Object::draw(sf::RenderWindow &window)
{
    window.draw(shape);
 
}
 
void Object::SetP(float x, float y)
{
    shape.setPosition(x,y);
}
 
Object::~Object()
{
}
 
};
Рисую так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
std::vector<Object*> a2;
    for (int i = 0; i < 100; i++)
    {
        a2.push_back (new Object("texture.png", 10, 100, 250, 50, i + 20, 50));
    }
 
 
while (window.isOpen())
    {
        
 
        Event event;
        while (window.pollEvent(event))
        {
            if (event.type == Event::Closed)
                window.close();
 
            if ((event.type == Event::KeyPressed) && (event.key.code == Keyboard::Escape))
                window.close();
 
            if (Keyboard::isKeyPressed(Keyboard::A))
            {
                a2.erase(a2.begin());
    
            }
        }
 
                window.pushGLStates();
        window.draw(text);
        for (int i = 0; i < 100; i++)
        {
    //      a1[i]->draw(window);
            a2[i]->draw(window);
        }
        window.popGLStates();
 
 
 
        window.display();
Картинка удаляется, тут никаких вопросов вроде нет. Но я не пойму, как при этом еще и память освободить.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
04.05.2016, 14:07
Ответы с готовыми решениями:

Как освободить память из-под вектора объектов?
vector&lt;TObj*&gt; obj; obj.push_back(new obj()); obj.erase(obj.begin()+indx);//удаляю указатель который указывал на объект &quot;Для...

Как освободить старые ImageVew чтобы освободить память
Привет всем Я новичок поэтому прошу сильно не пинать. В общем мое первое приложение типа интернет магазин. Одно окно в котором...

Как освободить память?
подскажите как правильно освободить память,спасибо заранее))) #include &quot;stdafx.h&quot; #include &lt;stdio.h&gt; #include...

2
0 / 0 / 0
Регистрация: 30.05.2016
Сообщений: 19
14.07.2016, 08:53
Конкретно на твой вопрос ответить не могу, но могу предположить что надо копать в сторону умных указателей.
0
Неэпический
 Аватар для Croessmah
18128 / 10712 / 2063
Регистрация: 27.09.2012
Сообщений: 27,001
Записей в блоге: 1
14.07.2016, 12:00
Почистить всё:
C++
1
2
3
4
for(auto ptr: a2){
   delete ptr;
}
a2.clear();
И по Вашему коду:
C++
1
2
3
auto removeIt = a2.begin();
delete *removeIt;
a2.erase(removeIt);
Общий принцип такой:
сначала delete для указателя,
потом удаляем этот указатель из вектора.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
14.07.2016, 12:00
Помогаю со студенческими работами здесь

Как правильно освободить память
Написал вот такой костыль: wchar_t* getDate() { time_t seconds = time(NULL); tm timeinfo = *(localtime(&amp;seconds)); return...

Как правильно освободить память
Здрасте! (Тема: Шаблоны функций.) Не могу правильно написать метод для освобождения памяти. В мейне делаю все необходимые мне...

Как правильно освободить память
Здравствуйте все! Подскажите, как правильно освобождать память, выделенную под массив оператором new? int *Arr = new int; ... delete...

Как освободить виртуальную память?
какой прогой можно освободить виртуальную памать ? :)

Как освободить память быстро?
Функция malloc неправильно работает...Заполняется память быстро,а очищается долго,с чем это связано,кто знает #include&lt;iostream&gt; ...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

Новые блоги и статьи
Динамические массивы в C++ - создание и использование
NullReferenced 27.04.2025
Динамические массивы представляют собой один из фундаментальных инструментов программирования на C++, позволяющий создавать структуры данных, размер которых определяется во время выполнения. . .
Асинхронный JavaScript: Промисы, Async/Await и Fetch API
Reangularity 27.04.2025
Пользователь заходит на веб-страницу, нажимает кнопку и. . . ничего не происходит. Сайт словно замер. Через несколько секунд всё внезапно оживает, но пользователь уже успел закрыть вкладку. Знакомая. . .
Management on GitLab and repository management in Visual Studio code
jigi33 27.04.2025
- repo management on GitLab - CI/ CD in GitLab - VCS repository management in Visual Studio code (see attachments)
Kanban или Scrum - что выбрать?
EggHead 27.04.2025
Kanban и Scrum — уже много лет удерживают лидирующие позиции среди гибких подходов. Руководители проектов и команды разработчиков то и дело сталкиваются с дилеммой: какой из этих двух методов выбрать. . .
Кастомные Middleware на C# в ASP.NET Core
UnmanagedCoder 27.04.2025
Разработка веб-приложений сегодня мало напоминает монолитное программирование прошлых лет. На смену громоздким блокам кода пришла модульная архитектура, где каждый компонент выполняет строго. . .
Анализ и линтинг кода JavaScript: ESLint, Prettier и JSHint
run.dev 26.04.2025
JavaScript прошёл долгий путь от простого языка для анимации веб-страниц до основы современной веб-разработки. С ростом сложности приложений, увеличением кодовых баз и масштабированием команд. . .
Паттерны в Python: Singleton, Factory и Observer
py-thonny 26.04.2025
Паттерны проектирования — это проверенные временем решения типовых проблем разработки программного обеспечения. Их история берёт начало с книги "Приёмы объектно-ориентированного проектирования. . . .
Исключения в C#: Stack Overflow, Access Violation и Out of memory
stackOverflow 26.04.2025
Исключения в C# — это не только механизм оповещения о проблемах, а целое искусство управления потоком выполнения программы в экстремальных ситуациях. Обычное исключение, например,. . .
Логирование в C# ASP.NET Core с помощью Serilog, ElasticSearch, Kibana
stackOverflow 25.04.2025
Помните те времена, когда для анализа проблемы приходилось подключаться к серверу, искать нужный лог-файл среди десятков других и вручную фильтровать тысячи строк в поисках ошибки? К счастью, эти дни. . .
Структура "железный OnKeyUp" вместо антидребезга. Полностью асинхронный счётчик.
Hrethgir 25.04.2025
Программа для симуляции схемы - Logisim Evolution В общем какое-то время отвлёкся, так было надо, теперь когда запилю это на verilog и FPGA , досоставлю заявку в ФИПС на полезную модель - не готов. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru