|
383 / 280 / 112
Регистрация: 28.04.2015
Сообщений: 1,726
|
|||||||||||
Повторный вызов деструктора26.12.2020, 08:41. Показов 5575. Ответов 67
Привет!
Есть класс TVector и есть у него деструктор вот такой:
"надо корректно обрабатывать ситуацию повторного вызова деструктора. В этом случае деструктор не должен пытаться освобождать в динамической памяти объекты повторно" я не оч.выкупил, что требуется, но решил добавить такую проверку в деструкторе:
0
|
|||||||||||
| 26.12.2020, 08:41 | |
|
Ответы с готовыми решениями:
67
Повторный вызов деструктора
Повторный вызов деструктора для объекта |
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
||
| 26.12.2020, 14:43 | ||
|
сама формулировка - за гранью здравого смысла. вызов деструктора - это смерть объекта. после того, как деструктор отработал, объект - мёртв. технически, "повторный запуск деструктора", это - ситуация, когда итак уже мёртвый объект умирает ещё один раз. ты осознаешь какой это бред?
0
|
||
|
3258 / 2060 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
|
|
| 26.12.2020, 14:43 | |
|
0
|
|
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
||
| 26.12.2020, 14:44 | ||
|
они избыточны. твой объект умирает. он все равно уже не воспользуется этими данными.
0
|
||
|
383 / 280 / 112
Регистрация: 28.04.2015
Сообщений: 1,726
|
|||
| 26.12.2020, 14:49 [ТС] | |||
|
если бы все было четко и ясно, то давно бы реализовал все без проблем. меня вообще смутило, что в постановке задания докапываются до этого деструктора! у него одна цель: удалить дин.память. Зачем что-то еще морочить с ним) Добавлено через 52 секунды
0
|
|||
|
19506 / 10109 / 2463
Регистрация: 30.01.2014
Сообщений: 17,832
|
|
| 26.12.2020, 16:01 | |
|
0
|
|
|
Комп_Оратор)
|
|||
| 26.12.2020, 16:15 | |||
|
0
|
|||
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|||||||||||||||||
| 26.12.2020, 16:18 | |||||||||||||||||
|
только ты не понял. тебя никто не просит дважды убивать объект. напротив, твоя задача: защитить код от ничайного "двойного умирания". как вообще может так случиться, что объект помер дважды?
- либо просто запретить второй вызов delete - либо сделать так, что бы второй вызов delete не приводил к смерти объекта
а что, если у нас многопоточная среда? указатель ptr - глобальный,а значит доступ к объекту могут получить несколько потоков. что, если несколько потоков одновременно начнут убивать наш объект? что бы гарантировать надежность кода, нужно обеспечить thread-safe защиту для указателя ptr. сделать это можно самыми разными способами. есть убер-надежные и элегантные RAII. я же приведу пример попроще:
тщательно осмыслив материал, ты ответишь своему преподавателю: 1. указатели на динамическую память необходимо обнулять, с целью предотвратить ущерб от ничайного двойного delete2. в многопоточной среде, доступ к функциональности, способной убить объект, должен осуществляться под защитой мутекса.
0
|
|||||||||||||||||
|
383 / 280 / 112
Регистрация: 28.04.2015
Сообщений: 1,726
|
||||||
| 26.12.2020, 16:44 [ТС] | ||||||
|
что бы недопустимть UB, нужно:
- либо просто запретить второй вызов delete - либо сделать так, что бы второй вызов delete не приводил к смерти объекта
1. твой пример на указателе, я же работаю со статическими экземплярами класса и оператор дилит скрыт в деструкторе 2. ты жестко обнуляешь в конкретном месте программы птр, а при тесте это могут вбить в любом месте прогги короче, я пока оставляю деструктор как есть я вообще уже имею трактовку, что речь идет про разделяемую память между векторами и намекают на деструктор. Т е намек делается на то, что у каждого вектора дб свой участок памяти, а не общий и чтобы при вызове деструктора для одного объекта остальные объекты не разрушались
0
|
||||||
|
19506 / 10109 / 2463
Регистрация: 30.01.2014
Сообщений: 17,832
|
||
| 26.12.2020, 16:50 | ||
|
Обнуление можете оставить, чтобы удовлетворить требования преподавателя. Но вы должны понимать, что в реальной ситуации делать обнуление не требуется.
0
|
||
|
383 / 280 / 112
Регистрация: 28.04.2015
Сообщений: 1,726
|
|
| 26.12.2020, 16:52 [ТС] | |
|
0
|
|
|
19506 / 10109 / 2463
Регистрация: 30.01.2014
Сообщений: 17,832
|
||
| 26.12.2020, 16:57 | ||
|
0
|
||
|
383 / 280 / 112
Регистрация: 28.04.2015
Сообщений: 1,726
|
||
| 26.12.2020, 16:59 [ТС] | ||
|
дословно я не помню
0
|
||
|
19506 / 10109 / 2463
Регистрация: 30.01.2014
Сообщений: 17,832
|
|
| 26.12.2020, 17:04 | |
|
FasterHarder, эта рекомендация касается объектов, время жизни которых еще не закончено, но логически они уже не используются. После выполнения деструктора время жизни всех полей заканчивается: их больше не существует и совершенно не важно какое у них значение, потому любое обращение несуществующему объекту приводит к UB.
Рекомендации Макконела - это очень хорошо, но если вы не можете различить ситуации, когда они применимы, а когда нет, то толку от них немного.
0
|
|
|
3258 / 2060 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
|
|
| 26.12.2020, 17:23 | |
|
0
|
|
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
||||
| 26.12.2020, 17:42 | ||||
|
категория доступа через this - всегда lvalue. Добавлено через 3 минуты
0
|
||||
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
||||||||||
| 26.12.2020, 18:02 | ||||||||||
|
потому что ты использовал волшебную фразу: мы оперируем указателем. и при этом нет возможности реализовать защиту от дурака. прочитав Макконелла, ты должен был понять, что защиту нужно делать только от ничайных ошибок. от откровенных вредителей, и от дэбилов делать защиту бесполезно. например, один альтернативно одаренный человек решил запускать методы по нулевому указателю. он - художник, он так видит. как ты сможешь защить код от такого дэбила?
"намеки" - это к гадалкам, к бабкам на лавочке, ну или просто к женщинам. они любят намеки. в программировании намёкам места нет. если что-то не понятно - уточняй сабж у руководства.
0
|
||||||||||
|
3258 / 2060 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
|
|
| 26.12.2020, 18:06 | |
|
1
|
|
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|||||||
| 26.12.2020, 18:22 | |||||||
|
спасибо, что указал мне на мою ошибку. странно, я вроде бы знаком с теорией. https://rextester.com/QCYR71969 но все равно, уже не в первый раз наступаю на эти же грабли. в голове почему то прочно засела мысль, что this - не_изменяемый указатель. хотя на самом деле this вообще, строго говоря, указателем не является. это - выражение. что-то наподобие такого:
0
|
|||||||
|
Комп_Оратор)
|
||||||||
| 26.12.2020, 21:34 | ||||||||
![]() 0x10, спасибо))) Я давно хочу написать короткое эссе о прикладом математизме в предметной области. Я постоянно пишу об этом, но как сказал поэт:
Ибо сказано: I am - Pointer! Историю о ссылках и категориях значений от времен https://en.cppreference.com/w/... e_category Размывание границ первоначально очерченных абстракции - путь из знания в религию. Часто можно видеть, как молодой послушник получив очередное наставление с сакральным знанием, в экстазе восклицает
От себя добавлю:
this как и много другое, в зависимости от контекста, это- английское слово - ключевое слово языка - выражение имеющее категорию значения - программный объект имеющий тип Вот ещё ссылка https://www.ibm.com/support/kn... plr035.htm в частности
Хотелось бы добавить, что в моей коротенькой фразе Сказанное мною, - сказано не в обиду, а скорее от избытка чувств) Поздравляю, всех вас с наступающим Новым Годом, братия во крестах!!!
0
|
||||||||
| 26.12.2020, 21:34 | |
|
Вызов деструктора
Вызов деструктора Вызов деструктора Вызов деструктора Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F
Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU.
Опрашиваются регистры. . .
|
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка:
Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
|
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо
Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
|
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман.
Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
|
|
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
|
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
|
Нашел вот забавное видео о измерениях. Лучшее что я видел на эту тему
kumehtar 26.08.2026
ILETXiw9bMQ
Основная суть и тезисы по измерениям:
0D (Нулевое измерение): точка, не имеющая длины, ширины, высоты или объема.
Объект не может перемещаться в 0D.
1D (Первое измерение):. . .
|
[EasyBuilder Pro] Памятка по разработке для панелей Weintek
ФедосеевПавел 26.08.2026
Памятка по разработке для панелей Weintek
ВВЕДЕНИЕ
Ранее, при реализации проектов основное внимание уделял разработке управляющей программы для контроллера, а панели оператора доставалось время. . .
|