5 / 5 / 4
Регистрация: 18.11.2014
Сообщений: 81
|
|||||||||||
1 | |||||||||||
Деструктор класса. Удаление динамически выделенного массива в классе17.05.2015, 22:46. Показов 7166. Ответов 21
Метки нет Все метки)
(
First.h
0
|
|
17.05.2015, 22:46 | |
Ответы с готовыми решениями:
21
Удаление динамического массива в классе Деструктор в классе Конструктор и деструктор в классе |
5 / 5 / 4
Регистрация: 18.11.2014
Сообщений: 81
|
|
17.05.2015, 23:05 [ТС] | 3 |
ошибка
0
|
265 / 165 / 56
Регистрация: 25.02.2015
Сообщений: 435
|
|
17.05.2015, 23:12 | 5 |
один из возможных вариантов: двойное удаление из-за отсутствия правильных конструкторов копирования и оператора =.
вот еще полезная тема: https://www.cyberforum.ru/cpp-... 62479.html
0
|
21 / 21 / 19
Регистрация: 18.03.2014
Сообщений: 148
|
||||||
17.05.2015, 23:15 | 6 | |||||
Fasterbru,
Не по теме: еще неплохо бы после выделения памяти добавить проверку. Не всегда операция "new" выделяет память. Бывают ситуации, когда она записывает в указатель NULL.
0
|
265 / 165 / 56
Регистрация: 25.02.2015
Сообщений: 435
|
|
17.05.2015, 23:17 | 7 |
нули возвращаются разве что в особых режимах сборки при особой конфигурации. в стандарте в таких случаях бросаются исключения. если вы проверяете на nullptr после new, то больше так не делайте.
0
|
5 / 5 / 4
Регистрация: 18.11.2014
Сообщений: 81
|
||||||
17.05.2015, 23:20 [ТС] | 8 | |||||
Perfilov, lss, bogdan_017,
main.cpp
0
|
265 / 165 / 56
Регистрация: 25.02.2015
Сообщений: 435
|
|
17.05.2015, 23:25 | 10 |
не используете, однако delete вызывается дважды для одного и того же, что есть ошибка. первый раз при явном вызове деструктора (зачем???), второй - при автоматическом вызове деструктора.
0
|
![]() 8720 / 4300 / 958
Регистрация: 15.11.2014
Сообщений: 9,744
|
|||||||||||
17.05.2015, 23:25 | 11 | ||||||||||
1 ошибка:
заменить
конструктор копии и оператор присваивания должны быть либо определены, либо явным образом запрещены. в данном случае они не определены явно и не запрещены явно. это значит поведение по дефолту. это значит - если один объект будет создан как копия другого, то имеем краш в деструкторе при уничтожении последнего объекта.
1
|
5 / 5 / 4
Регистрация: 18.11.2014
Сообщений: 81
|
|
17.05.2015, 23:26 [ТС] | 12 |
lss, он проходит это нормально. я могу использовать эту память.
0
|
5 / 5 / 4
Регистрация: 18.11.2014
Сообщений: 81
|
|
17.05.2015, 23:27 [ТС] | 14 |
hoggy, 1 ошибку исправил. 2) я выше выложил код cpp где использую объект. там только создание и вызов деструктора.
0
|
![]() 8720 / 4300 / 958
Регистрация: 15.11.2014
Сообщений: 9,744
|
|||||||||||
17.05.2015, 23:29 | 16 | ||||||||||
![]() Решение
ну это жесть вообще.
для настоящих ценителей. лекарство: заменить:
потому что UB, а значит никаких гарантий. скорее всего работать будет. но теоретически бабахнуть может в любой момент. настоящее лекарство - престрелить нафиг того программиста, который столь необдуманно в ручную дергает деструктор.
1
|
5 / 5 / 4
Регистрация: 18.11.2014
Сообщений: 81
|
|
17.05.2015, 23:29 [ТС] | 17 |
lss, почему?
0
|
![]() 8720 / 4300 / 958
Регистрация: 15.11.2014
Сообщений: 9,744
|
||||||
17.05.2015, 23:31 | 19 | |||||
это не UB.
более того - деструктор можно звать руками не просто так. у этого есть применение. целые иодемы и техники программирования доступны лишь благодаря такой возможности. (см boost::optional, например) А UB это:
0
|
940 / 868 / 355
Регистрация: 10.10.2012
Сообщений: 2,706
|
|
17.05.2015, 23:36 | 20 |
Потому, что он второй раз вызовется при выходе из программы (когда будет уничтожаться объект), а память уже освобождена.
Добавлено через 43 секунды Написал: Добавлено через 1 минуту Это как? Что освобождаем? Добавлено через 2 минуты А в коде у ТС разве не так? Скобки можно раздвинуть до границ main().
0
|
17.05.2015, 23:36 | |
Помогаю со студенческими работами здесь
20
Ругается на деструктор (выделял динамически память). Почему? Как динамически создать массив из динамически конструируемых экземпляров класса? При динамическом создании объекта в классе деструктор не вызывается
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |