Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/8: Рейтинг темы: голосов - 8, средняя оценка - 4.50
191 / 52 / 19
Регистрация: 18.02.2013
Сообщений: 508
Записей в блоге: 9

Очистка вектора объектов пользовательского класса

16.04.2017, 00:09. Показов 1695. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте.
Есть вектор std::vector<Morphology*> MorphCollection который заполняется следующим образом:
C++
1
2
3
Morphology *Morph = new Morphology();
MorphCollection.push_back(Morph);
delete Morph
данные добавляются N раз.
Собственно вопрос : как мне правильно очистить память из под вектора?
Делал так:
C++
1
2
3
4
5
6
7
8
    for(int i = 0; i < MorphCollection.size(); i++)
    {
        delete MorphCollection[i];
    }
    /*for(std::vector<Morphology*>::iterator it = MorphCollection.begin(); it != MorphCollection.end(); ++it)
    {
        delete (*it);
    }*/
И получал следующую ошибку в обоих случаях:
Invalid pointer operation
Как это делать правильно? Спасибо.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
16.04.2017, 00:09
Ответы с готовыми решениями:

Удаление элемента из вектора пользовательского класса
Помогите, пожалуйста. Не могут понять, что я упускаю. При удалении элемента из вектора происходит краш. class some_class { public:...

Вектор объектов пользовательского класса
Привет всем! Есть класс Automaton, я пытаюсь создать вектор Sample с объектами этого класса, а они ведут себя не так, как я ожидаю -...

Подсчет созданных объектов пользовательского класса
Создать класс SIGMOID таким образом, чтобы при уничтожении последнего объекта на экран выдавалось сообщение о наибольшее количество...

4
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33192 / 21488 / 8233
Регистрация: 22.10.2011
Сообщений: 36,874
Записей в блоге: 12
16.04.2017, 00:59
Если у тебя C++11 - лучше всего использовать smart pointer-ы, например shared_ptr, вместо обычных указателей на объект, после чего вектор сам позаботится об уничтожении объектов, хранящихся в нем.
1
191 / 52 / 19
Регистрация: 18.02.2013
Сообщений: 508
Записей в блоге: 9
16.04.2017, 01:56  [ТС]
volvo, вот так?
C++
1
std::vector<std::shared_ptr<Morphology>> MorphCollection;
C++
1
2
std::shared_ptr<Morphology> Morph(new Morphology());
MorphCollection.push_back(Morph);
Добавлено через 10 минут
И ещё:
C++
1
MorphCollection.clear();
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33192 / 21488 / 8233
Регистрация: 22.10.2011
Сообщений: 36,874
Записей в блоге: 12
16.04.2017, 08:53
Цитата Сообщение от Gdasar Посмотреть сообщение
вот так?
Лучше так:
C++
1
MorphCollection.push_back(std::shared_ptr<Morphology>(new Morphology()));
или так:

C++
1
2
std::shared_ptr<Morphology> Morph(new Morphology());
MorphCollection.push_back(std::move(Morph));
2
191 / 52 / 19
Регистрация: 18.02.2013
Сообщений: 508
Записей в блоге: 9
16.04.2017, 14:15  [ТС]
volvo, с добавлением вот этого
C++
1
MorphCollection.push_back(std::move(Morph));
стал получать
Exception class $C0000005 with message 'c0000005 ACCESS_VIOLATION'
на следующем коде:
C++
1
2
3
4
5
6
7
8
9
10
void Morphology::Clear()
{
    SearchWords->Clear();
    Speech->Clear();
    BeginWords->Clear();
    AddWords->Clear();
    Case->Clear();
    DetailInformation->Clear();
    ExpressionList->Clear();
}
C++
1
2
3
4
5
6
7
8
9
10
11
class Morphology
{
    private:
        TStringList *SearchWords; 
        TStringList *Speech; 
        TStringList *Case;
        TStringList *BeginWords; 
        TStringList *AddWords; 
        TStringList *ExpressionList;
        TStringList *DetailInformation;
        bool Default;
А вот здесь, я совсем не понял, где передаётся заполненный объект:
C++
1
MorphCollection.push_back(std::shared_ptr<Morphology>(new Morphology()));
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
16.04.2017, 14:15
Помогаю со студенческими работами здесь

Организация коллекции объектов пользовательского класса
Есть некий пользовательский класс Mob. И есть класс MobAssistant, существующий для управления коллекцией объектов класса Mob. ...

Как создать элемент вектора пользовательского типа(класса)?
Делаю змейку в консоли, а по сути тренируюсь с классами и векторами. Есть класс с конструктором который создает кусок змейки в...

Вставка и удаление объектов пользовательского класса в deque
Доброго времени суток! У меня есть контейнер хранящий объекты пользовательского класса Detail: deque&lt; Detail* &gt; accumulator1 ( 1,...

Программа, использующая массив объектов пользовательского класса
Написать код программы, в которой реализовать следующие действия: - инициализировать массив из 5 элементов, каждый элемент которого...

Как создать STL stack объектов пользовательского класса?
Всем привет! Скажите пожалуйста, как создать STL stack объектов пользовательского класса в WinForm C++. У меня постоянно ругается на память...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru