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

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

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

Есть класс некого объекта, который я буду рисовать:
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
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.05.2016, 14:07
Ответы с готовыми решениями:

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

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

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

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

2
0 / 0 / 0
Регистрация: 30.05.2016
Сообщений: 19
14.07.2016, 08:53 2
Конкретно на твой вопрос ответить не могу, но могу предположить что надо копать в сторону умных указателей.
0
Don't worry, be happy
17780 / 10544 / 2035
Регистрация: 27.09.2012
Сообщений: 26,514
Записей в блоге: 1
14.07.2016, 12:00 3
Почистить всё:
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
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.07.2016, 12:00
Помогаю со студенческими работами здесь

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

Как правильно освободить память
Здравствуйте все! Подскажите, как правильно освобождать память, выделенную под массив оператором...

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

Как освободить память быстро?
Функция malloc неправильно работает...Заполняется память быстро,а очищается долго,с чем это...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru