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

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

Войти
Регистрация
Восстановить пароль
 
Nomadd
14 / 9 / 0
Регистрация: 12.07.2012
Сообщений: 82
#1

Удаление элементов из std::vector - C++

17.02.2013, 18:02. Просмотров 847. Ответов 3
Метки нет (Все метки)

У меня есть класс Zone.
Но объявлен как массив vector в другом классе.
C++
1
2
3
4
5
6
class World
{
public:
    std::vector<Zone*>Zones;
...
};
Дальше постепенно заполняю его значениями,
C++
1
World::Zones.push_back(new Zone(X,Z,texture));
Но проблема с удалением элементов - элементы удаляются, но память не освобождается.
Пробовал по разному удалять(это всё находится в одной из функций класса World):
C++
1
         World::Zones.clear();
C++
1
         World::Zones.~vector();
C++
1
2
    for(int i=0;i<World::Zones.size();i++)
        delete World::Zones[i];
C++
1
2
    for(int i=0;i<World::Zones.size();i++)
    free(World::Zones[i]);
Но всё равно память не освобождается.
Если после такого удаления опять создать элементы - знаимаемая память только увеличится.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.02.2013, 18:02     Удаление элементов из std::vector
Посмотрите здесь:

std::vector<char**> C++
C++ std::vector
Удаление первых n элементов из vector C++
C++ Удаление элемента из вектора ( std::vector<Bullet> )
Удаление элементов из vector; bind или not1 C++
C++ Std::vector
C++ Контейнер std::vector
Удаление элемента из std::vector<> C++
Vector, список. Удаление и вставка элементов C++
C++ Как в std::vector получить доступ к методам элементов?
C++ Удаление элементов из vector<string>
Абстрактный класс, удаление наследника из std::vector<T> C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
villu
202 / 202 / 4
Регистрация: 06.08.2011
Сообщений: 600
Записей в блоге: 1
17.02.2013, 18:06     Удаление элементов из std::vector #2
чтоб удалять после new нужно вызывать delete

можно храить в векторе умные указатели (shared_ptr), тогда при erase/clear они будут сами освобождать объект.
Nomadd
14 / 9 / 0
Регистрация: 12.07.2012
Сообщений: 82
17.02.2013, 18:18  [ТС]     Удаление элементов из std::vector #3
delete не освобождает память, только элементы удаляет.
А что за умные указатели? Ими можно память освободить?
villu
202 / 202 / 4
Регистрация: 06.08.2011
Сообщений: 600
Записей в блоге: 1
17.02.2013, 18:24     Удаление элементов из std::vector #4
Цитата Сообщение от Nomadd Посмотреть сообщение
delete не освобождает память
Это в какой вселенной такое безобразие?
Если у тебя остается что-то после delete от объекта, то это значит, что где-то еще у тебя выделяется память и потом не удаляется.

Если ты имеешь в виду, что delete не удаляет из вектора - да не удаляет и не должен.

shared_ptr
http://en.cppreference.com/w/cpp/memory/shared_ptr
Yandex
Объявления
17.02.2013, 18:24     Удаление элементов из std::vector
Ответ Создать тему
Опции темы

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