1 / 1 / 0
Регистрация: 21.02.2016
Сообщений: 41
|
|
1 | |
Какую память освобождать в деструкторе?17.09.2017, 14:54. Показов 1939. Ответов 6
Если я вызываю деконструктор класса, допустим чтобы освободить динамическую память, выделенную с помощью new или malloc, то память, выделенная под остальные атрибуты, будет освобождена?
0
|
|
17.09.2017, 14:54 | |
Ответы с готовыми решениями:
6
Обязательно ли освобождать память? Как правильно освобождать память Как правильно освобождать память от вектора? |
284 / 232 / 114
Регистрация: 07.09.2016
Сообщений: 584
|
|
17.09.2017, 15:15 | 2 |
все не так просто, как вы описали. но возмжно вы имели в виду не вызов деструктора, а вызов чего-нить типа
delete someObjPtr; Вызов же деструктора например someObjPtr->~SomeObjPtr() не освобождает память, на которую указывает someObjPtr. Вызов деструктора приводит к вызовам деструкторов мемберов. Вызов деструктора != освобождение памяти.
0
|
3434 / 2813 / 1249
Регистрация: 29.01.2016
Сообщений: 9,426
|
|
17.09.2017, 19:06 | 3 |
В общих случаях не требуется явный вызов деструктора, он вызовется автоматически при окончании жизни объекта.
Всё, что должен сдеалать явный деструктор, должно быть в нём прописано. Насчёт освобождения памяти: то, что выделялось, тобой, через new (malloc), должно освобождаться через delete (free), остальное - не твоя забота.
0
|
1 / 1 / 0
Регистрация: 21.02.2016
Сообщений: 41
|
||||||
17.09.2017, 19:09 [ТС] | 4 | |||||
DU3, я имел ввиду если явно прописать деструктор. К примеру так
0
|
284 / 232 / 114
Регистрация: 07.09.2016
Сообщений: 584
|
|
17.09.2017, 19:21 | 6 |
![]() Решение
ну если до букв докапываться, то от вызова деструктора память выделенная под a, A и p не освободится.
например как работает оператор delete, который нельзя переопределить: он вызывает деструктор для объекта и потом освобождает память, выделенную под этот объект. т.е. память освобождается за пределами вызова деструктора. поэтому, если вы удаляете объект через delete, то можете рассчитывать на то, что нужное вам освобождение произойдет. в случае стека история похожая. деструктор вызовится ну а потом стек подправится нужным образом. но есть и другие случаи, когда деструктор приходится явно вызывать. у вас который?
1
|
1 / 1 / 0
Регистрация: 21.02.2016
Сообщений: 41
|
|
18.09.2017, 16:37 [ТС] | 7 |
DU3, все, спасибо большое, разобрался
![]()
0
|
18.09.2017, 16:37 | |
18.09.2017, 16:37 | |
Помогаю со студенческими работами здесь
7
Как правильно освобождать память в динамических структурах Нужно ли освобождать память перед повторым выделением? Как и когда правильно освобождать динамически выделенную память?
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |