|
0 / 0 / 0
Регистрация: 09.04.2020
Сообщений: 43
|
|
C++ деструктор23.04.2020, 18:07. Показов 618. Ответов 13
Метки деструктор (Все метки)
Прошу помочь с реализацией деструктора- после удаления обьекта муж пола обьекты жп не выводятся
(ФАЙЛ person.h) #ifndef PERSON_H_INCLUDED #define PERSON_H_INCLUDED #include <iostream> #include "Data.h" enum gender { MALE, FEMALE }; class Person { private: Data d; gender c; std::string name; Person* spouse; public: Person( gender c, std::string name, Data d, Person* spouse=nullptr) :d(d),c(c), name(name), spouse(spouse) {} ~Person() { (this->spouse)->spouse=nullptr; // spouse->spouse = nullptr; } friend std::ostream& operator<<(std::ostream& out, const Person& f ) { if ( f.spouse == nullptr && f.c == gender::MALE) out << "Male" << " " << f.name << " " << f.d << " " << " is single " << " \n"; if (f.spouse == nullptr && f.c == gender::FEMALE) out << "Female" << " " << f.name << " " << f.d << " " << " is single " << " \n"; if (f.spouse != nullptr && f.c == gender::FEMALE) out << "Female" << " " << f.name << " " << f.d << " is married on "<< f.spouse->name << " " << f.spouse->d << " \n"; if (f.spouse != nullptr && f.c == gender::MALE) out << "Male" << " " << f.name << " " << f.d << " is married on "<< f.spouse->name << " " << f.spouse->d << " \n"; return out; } void Marry(Person& other) { if (this->c != other.c && other.spouse == nullptr && this->spouse == nullptr) { this->spouse = &other; other.spouse = this; } else cout << this->name << " and " << other.name << " cant be married \n"; } void Divorce() { if ( this->spouse != nullptr) { this->spouse->spouse = nullptr; this->spouse = nullptr; } else cout << this->name << " cant be divorced \n"; } void ChangeName(std::string name1) { this->name = name1; } }; #endif ФАЙl MAIN>CPP #include "Person.h" #include <iostream> int main() { Person* pm [3] ; // male Person* pf[3]; // female pm[0] = new Person(MALE, "Alex", Data(1, 2, 2011)); pf[0] = new Person(FEMALE, "Anna", Data(21, 12, 2001)); pm[1] = new Person(MALE, "Felix", Data(6, 18, 2001)); pf[1] = new Person(FEMALE, "Diana", Data(7, 12, 2001)); pm[2] = new Person(MALE, "Zeus", Data(8, 22, 2001)); pf[2] = new Person(FEMALE, "Afina", Data(1, 2, 2001)); pm[0]->Marry(*pf[0]); pf[1]->Marry(*pm[1]); pm[2]->Marry(*pf[2]); cout << *pm[0]; cout << *pf[0]; cout << *pm[1]; cout << *pf[1]; cout << *pm[2]; cout << *pf[2]; pm[0]->Divorce(); cout << (*pm[0]); cout << (*pf[0]); pm[0]->ChangeName("OLEG"); cout << (*pm[0]); //pm[0]->~Person(); //pm[1]->~Person(); // pm[2]->~Person(); delete pm[0]; delete pm[1]; delete pm[2]; cout << *pf[1]; delete pf[0]; delete pf[1]; delete pf[2]; //pf[0]->~Person(); // pf[1]->~Person(); // pf[2]->~Person(); }
0
|
|
| 23.04.2020, 18:07 | |
|
Ответы с готовыми решениями:
13
Почему создается виртуальный деструктор A, а в таблице виртуальных функций лежит деструктор B Деструктор Деструктор! |
|
130 / 87 / 48
Регистрация: 27.12.2019
Сообщений: 510
|
|||||||||||
| 23.04.2020, 18:10 | |||||||||||
|
Это зачем?
![]() ![]()
0
|
|||||||||||
|
0 / 0 / 0
Регистрация: 09.04.2020
Сообщений: 43
|
|
| 23.04.2020, 18:13 [ТС] | |
|
это попытки решить проблему
0
|
|
|
130 / 87 / 48
Регистрация: 27.12.2019
Сообщений: 510
|
||||||
| 23.04.2020, 18:22 | ||||||
|
ALLAh_2, сделайте без этого
Добавлено через 7 минут ALLAh_2,
0
|
||||||
|
0 / 0 / 0
Регистрация: 09.04.2020
Сообщений: 43
|
|
| 23.04.2020, 18:53 [ТС] | |
|
А возможно ли рекурсивно удалять память? Хочу оставить поле spouse
0
|
|
|
130 / 87 / 48
Регистрация: 27.12.2019
Сообщений: 510
|
||||||
| 23.04.2020, 18:59 | ||||||
|
ALLAh_2, так конечно лучше не делать. Там рекурсии нет , но класс имеет поле своего типа
0
|
||||||
|
0 / 0 / 0
Регистрация: 09.04.2020
Сообщений: 43
|
|
| 23.04.2020, 19:04 [ТС] | |
|
возникает исключение stack overflow,не могу найти проблему
0
|
|
|
фрилансер
6444 / 5637 / 1128
Регистрация: 11.10.2019
Сообщений: 14,993
|
||||||
| 23.04.2020, 19:16 | ||||||
|
_-_VLADoS_-_, вот так компактнее, в деструкторе можно не обнулять, экземпляр заканчивает существование
0
|
||||||
|
0 / 0 / 0
Регистрация: 09.04.2020
Сообщений: 43
|
|
| 23.04.2020, 20:01 [ТС] | |
|
связано ли это с тем,что поле споуз удаляется у удаленного обьекта?
также мне нужно удалять поле споуз у обьекта,который ссылается на удаленный
0
|
|
|
фрилансер
6444 / 5637 / 1128
Регистрация: 11.10.2019
Сообщений: 14,993
|
||||||
| 23.04.2020, 20:21 | ||||||
|
ALLAh_2, почитай про std::shared_ptr. Тогда такие манипуляции со ссылками на другие объекты будет гораздо проще делать
Да и в деструкторе само подчистится
0
|
||||||
|
0 / 0 / 0
Регистрация: 09.04.2020
Сообщений: 43
|
|
| 24.04.2020, 19:52 [ТС] | |
|
Person::~Person()
{ delete spouse; } никак не могу понять где идет переполнение стека и как его исправить(вложения)
0
|
|
|
фрилансер
6444 / 5637 / 1128
Регистрация: 11.10.2019
Сообщений: 14,993
|
|
| 24.04.2020, 20:09 | |
|
ALLAh_2, покажи полный код. Используй тег
[CPP][/CPP]
0
|
|
|
0 / 0 / 0
Регистрация: 09.04.2020
Сообщений: 43
|
|
| 24.04.2020, 20:12 [ТС] | |
|
https://onlinegdb.com/rkV105eFL
ссылка на полный код в онлайн сервисе
0
|
|
|
Вездепух
12925 / 6793 / 1819
Регистрация: 18.10.2014
Сообщений: 17,189
|
||||||||
| 24.04.2020, 20:44 | ||||||||
|
Здесь создается кольцевой список
0
|
||||||||
| 24.04.2020, 20:44 | |
|
Помогаю со студенческими работами здесь
14
Деструктор Деструктор
Деструктор Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
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 .
Быстренько разберем подход "на фреймах".
Мы делаем одну. . .
|