Форум программистов, компьютерный форум, киберфорум
C/С++ под Linux
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
2 / 2 / 0
Регистрация: 31.10.2013
Сообщений: 123

Как правильно удалить объект из списка

06.04.2019, 21:06. Показов 1243. Ответов 1

Студворк — интернет-сервис помощи студентам
Всем привет. Делаю лабу. Ни как не доделаю.... :-(
Создаю класс, Студент. Задача описать класс и создать массив объектов. Это просто, но я что то загнался.
Решил реализовать список объектов которые хранит сам класс. у класса есть два свойства last & first которые указывают на последний и первый объект. У объекта есть два свойства next & prev, следующий и предыдущий объект соответственно.
Вопрос такого характера, как удалить объект из списка что бы освободить память. Объекты могут быть как в стеке, так и в куче, после нужно сделать сохранение и восстановление из файла, в каком виде делать буду пока не знаю, может даже не грузить в память все данные а выводить список ФИО и ID, восстанавливать конкретный объект из файла. Может и не правильно но пока идея такая, но это потом, пока в память буду грузить всё.
Заголовочный файл.
Кликните здесь для просмотра всего текста

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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
#ifndef CSTUDENT_H
#define CSTUDENT_H
/*############################ INCLUDES ###################################*/
#include <iostream>
#include "date.h"
#include <sstream>
 
/*######################### DEFINE NAMESPASES #############################*/
using std::string;
 
 
/*############################CLASS CStudent################################*/
 
class CStudent
{
     // Определение данных Класса
    static int scount;// Колличество студентов
    static unsigned long all_count; // обектов было всего...
    static CStudent* first,// Ссылки на первый объект
                    * last; // Ссылки на последний объект
// Определение внутренних методов объекта
    static void GetID(std::string& str);
 
 
protected:
   // Определение данных объекта
    string
           name = "",       // Имя студента
           surName = "",    // Фамилия студента
           patronymic = "", // Отчество студента
           address="",       // Адрес проживания
           phone="",        // Номер телефона
           faculty="";      // Факультет
    short course=0;         // курс
    Date birthDate;         // День Рождения
    string sID;              // Номер студ билета (идентификатор)
    CStudent * next, // Ссылки на следующий объект
             * prev; // Ссылки на предыдущий объект
    bool     dismissed; //Статус студента true - отчислен, false - учится.
public:
    //CStudent();
    CStudent(string _name, string _surName, string _patronymic, Date _BirthDate, short course, string _faculty, string _address, string phone);
    CStudent(string _name, string _surName, string _patronymic, Date BirthDate);
    CStudent(string _name, string _surName, string _patronymic, Date BirthDate, short course, string faculty, string address );
 // Getters
    string& GetName(){return name;}
    string& GetSurName(){return surName;}
    string& GetPatronymic(){return patronymic;}
    string& GetAddress(){return address;}
    string& GetPhone(){return phone;}
    string& GetFaculty(){return faculty;}
    short   GetCourse(){return course;}
    Date&   GetBirthDate(){return birthDate;}
    string& GetID();
 //Setters
    void SetName(string &);
    void SetSurName(string&);
    void SetPatronymic(string&);
    void SetAddress(string&);
    void SetPhone(string&);
    void SetFaculty(string&);
    void SetCourse(short);
    void SetBirthDate(string&);
// other methods
    void print();
};
CStudent* CStudent::first = nullptr;
CStudent* CStudent::last = nullptr;
 
#endif // CSTUDENT_H
Файл реализации


Кликните здесь для просмотра всего текста
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
55
56
57
#include "cstudent.h"
#include <sstream>
#include <stdlib.h>
#include <iomanip>
 
CStudent::CStudent(string _name, string _surName, string _patronymic, Date _BirthDate)
{
 
    // реализация функционала списка.###########
    if(!last && !first)
    {
        last = this; first = this;
        next = nullptr; prev=nullptr;
    }
    else
    {   last->next = this;
        this->prev = last;
        last = this;
    }
    //##########################################
    name = _name;                // Имя студента
    surName = _surName;          // Фамилия студента
    patronymic = _patronymic;    // Отчество студента
    address="";                  // Адрес проживания
    phone="";                    // Номер телефона
    faculty="";                  // Факультет
    course=1;                    // курс
    birthDate = _BirthDate; // День Рождения
    GetID(sID);                  // Номер студ билета (идентификатор)
 
 
 
}
 
CStudent::CStudent(string _name, string _surName, string _patronymic, Date _BirthDate, short _course, string _faculty, string _address ):
    CStudent::CStudent(_name,_surName, _patronymic, _BirthDate)
{
    faculty = _faculty; address = _address; course = _course;
}
 
CStudent::CStudent(string _name, string _surName, string _patronymic, Date _BirthDate, short _course, string _faculty, string _address, string _phone):
    CStudent::CStudent(_name, _surName, _patronymic, _BirthDate, _course, _faculty, _address)
{
    phone = _phone;
}
 
 
 
void CStudent::GetID(std::string& str)
{
    std::stringstream sout;
    sout.width(5); sout.unsetf(std::ios::dec); sout.setf(std::ios::hex|std::ios::uppercase);
    std::srand(static_cast<unsigned>(all_count));
    int temp = std::rand()%100000;
    sout << std::setfill('0') << temp;
    str = sout.str();
}

В данном случае, как правильно удалить объект из списка, все манипуляции со ссылками списка, планирую делать в диструкторе. Прошу помощи у более опытных людей
P.S.
Прошу прощение если код вызывает ужас. Буду благодарен рекомендациям.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
06.04.2019, 21:06
Ответы с готовыми решениями:

Как правильно удалить объект?
Добрый день. Подскажите пожалуйста почему объект не уничтожается в PHP 5. class Master { public $testparam; } $obj2 =...

Как правильно удалить объект класса?
В коде описан класс ContainerPictureBox который управляет объектом PictureBox. При создании экземпляра этого класса в конструкторе...

Как удалить объект списка list?
у меня есть pPlan - это указатель на класс Plan. Listabit - список, созданный в классе Plan . pPlan-&gt;Listabit;// вот я на него...

1
 Аватар для peter_irich
366 / 222 / 53
Регистрация: 18.10.2017
Сообщений: 2,359
07.04.2019, 20:58
Список объектов - это одно, массив объектов - это другое и тут нужен не массив объектов,
а массив указателей на объекты, тогда их можно будет удалять. Удалить из списка - не проблема,
там же есть next и prev. Исключить адрес удаляемого объекта из цепочки и всё. Для удаления самого
объекта надо после этого вызвать для указателя на него delete или free(), смотря как он создавался.
И деструктора в данном случае я не вижу надобности касаться, это надо делать из главной программы.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
07.04.2019, 20:58
Помогаю со студенческими работами здесь

Как правильно удалить объекты из списка?
List&lt;mytype&gt; dinx = new List&lt;mytype&gt;(); объекты типа picturebox метод dinx.Clear() не помогает! они остаются как правильно...

Как правильно дублировать в actionscript 2.0 и как правильно сделать объект для дублирования
Я только начал изучать actionscript и прошу мне помочь. Как правильно дублировать в actionscript 2.0 и как правильно сделать объект для...

Как правильно удалить элемент управления формы и как правильно после этого переименовать элементы управления?
Еще раз доброе утро! В ходе работы возник вопрос. У меня на форме три Label: Label1, Label2, Label3. Я выделил на форме Label1 и нажал...

Как правильно вызвать объект
Доброго времени суток, такое дело создаю свою функцию и из неё вызвать Label, но выходит ошибка. Вот так, но это стандарт всё работает...

Как правильно закрыть объект?
В отчете, при первом отктытии все отображается правильно, как задумано. После каждого нового открытия, в поле TQRRichText записываются...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Установка Emscripten SDK (emsdk) и CMake на Windows для сборки C и C++ приложений в WebAssembly (Wasm)
8Observer8 30.01.2026
Чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. Система контроля версиями Git. . .
Подключение Box2D v3 к SDL3 для Android: физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru