11 / 1 / 1
Регистрация: 02.10.2015
Сообщений: 98
|
||||||
1 | ||||||
Не вызывается деструктор структуры02.06.2016, 15:58. Просмотров 3573. Ответов 9
Метки нет Все метки)
(
Создал класс. Членом класса является указатели на структуру, которая определена в классе. Поля структуры указатели, т.к. работа будет с дим. данными.
Создал для структуры конструктор и деструктор. Начал проверку. Создал экземпляр класса и один объект структуры. Завершаю программу. Деструтор класса вызывается, а структуры нет. Почему?
Еще раз...почему деструктор струкуры не вызывается при выходе из области , а класса вызывается. И как решить данную проблему? ЗЫ. я организовал фатически двусвязный список линейный. Элемент списка структура. Члены данные класса указатели на начало/конец+еще пару полей.
0
|
|
02.06.2016, 15:58 | |
При создании класса конструктор вызывается 2 раза, затем вызывается деструктор о_О Не вызывается деструктор Не вызывается деструктор Деструктор не вызывается |
|
Don't worry, be happy
|
|
02.06.2016, 16:04 | 2 |
Всё вызывается.
Давайте минимальный компилируемый код, демонстрирующий проблему, а не кусок не пойми откуда выдранный. P.S. B* p; - это указатель и будет уничтожен сам указатель, а не данные, на которые он указывает.
1
|
27 / 27 / 16
Регистрация: 18.05.2016
Сообщений: 128
|
|
02.06.2016, 16:05 | 3 |
Ты меня запутал. Ты же сказал, что создал один объект структуры, тогда в чём проблема, если деструктор вызывается?
0
|
11 / 1 / 1
Регистрация: 02.10.2015
Сообщений: 98
|
|||||||||||||||||||||
02.06.2016, 16:20 [ТС] | 5 | ||||||||||||||||||||
определение метода
main
0
|
Don't worry, be happy
|
||||||
02.06.2016, 16:26 | 6 | |||||
Объект создали, но никто его не уничтожает.
То, что выделяется руками - освобождается тоже руками. Автоматически удаляются только объекты с статическим, потоковым и автоматическим временем хранения. new - создает объекты с динамическим временем хранения, за их создание и удаление отвечаете Вы сами.
0
|
11 / 1 / 1
Регистрация: 02.10.2015
Сообщений: 98
|
||||||
02.06.2016, 16:47 [ТС] | 8 | |||||
Объект библ удаляю, через деструктор. Почему деструктор структуры автоматически не вызывается. ?:?: И какие хорошие пути решения есть или исправления.? Добавлено через 2 минуты Т.е. я сам их удалять должен. Я почему -то думаю , что при выходе из области должен вызваться деструктор. Поэтому ручного удаления я не предусмотрел (была идея при уничтожении библ пройтись по списку и удалять, но подумал, что само как-то) А как реализовать и есть ли такая возможность более элегантного решения?
0
|
Don't worry, be happy
|
|
02.06.2016, 16:48 | 9 |
А с чего он должен?
Удалять самому или использовать идиому RAII, в частности "умные указатели". Только здесь это не факт что поможет. Что мешает нормальный список сделать? Зачем вся эта возня си-подобными способами? std::list
0
|
11 / 1 / 1
Регистрация: 02.10.2015
Сообщений: 98
|
|
02.06.2016, 17:05 [ТС] | 10 |
Я ООП изучаю (начало пути). Прошел первую тему пару классов создал отладил. Вот взял задачку из учебника. Поэтому такая возня.
Спасибо за помощь
0
|
02.06.2016, 17:05 | |
Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь. Почему вызывается деструктор?
Когда вызывается деструктор класса? Вызывается ли деструктор в данной программе? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |