|
383 / 280 / 112
Регистрация: 28.04.2015
Сообщений: 1,726
|
|||||||||||
Повторный вызов деструктора26.12.2020, 08:41. Показов 5474. Ответов 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
|
|||
|
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
|
|
| 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
|
||||||
|
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
|
||
| 26.12.2020, 16:50 | ||
|
Обнуление можете оставить, чтобы удовлетворить требования преподавателя. Но вы должны понимать, что в реальной ситуации делать обнуление не требуется.
0
|
||
|
383 / 280 / 112
Регистрация: 28.04.2015
Сообщений: 1,726
|
|
| 26.12.2020, 16:52 [ТС] | |
|
0
|
|
|
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
|
||
| 26.12.2020, 16:57 | ||
|
0
|
||
|
383 / 280 / 112
Регистрация: 28.04.2015
Сообщений: 1,726
|
||
| 26.12.2020, 16:59 [ТС] | ||
|
дословно я не помню
0
|
||
|
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
|
|
| 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 | |
|
Вызов деструктора
Вызов деструктора Вызов деструктора Вызов деструктора Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Просветление в 5 секунд
kumehtar 10.07.2026
Андрей Веретенников выдал фразу недавно: "Вам не обязательно кем-то себя считать"
|
Эксперимент с картинкой-обложкой на CodinGame
Adler 10.07.2026
Решил на днях провести эксперимент. У меня есть аккаунт на CodinGame, ТОП-3 по РФ среди 2200 участников (в разделе соревнования по программированию ИИ-ботов). Там есть обложка, куда можно влепить. . .
|
GitDOS: Когда я решил скрестить MS-DOS, GitHub и Claude
MaGz GoLd 08.07.2026
Привет, Киберфорум! Хочу поделиться своим проектом, который, надеюсь, вас заинтересует. GitDOS — это веб-приложение, которое позволяет запускать DOS в браузере с тремя крутыми фичами: диски живут в. . .
|
Учебный мини "цифровой двойник" = (Сервер = Java + Flask_питон )+(3D = Гугловскаая 4T nvideo + google colab) +( WMS = Odoo на Docker)
anaschu 07.07.2026
Увидел в требованиях к вакансии создателя имитационных моделей связку (REst + Api + WMS + Anylogic + питон + 3D Nvideo), и решил посмотреть, что это такое. Из этого всего я работал более менее. . .
|
|
Море в объективе
kumehtar 06.07.2026
Хотел написать много проникновенных слов, но передумал.
Оно само - говорит.
Кто слышит тот слышит.
|
Doom для терминала без стрельбы и монстров. 3D Raycasting на ascii.
dcc0 05.07.2026
Попросил нейронную сеть deepai. org написать рейкастинг 3D с библиотекой ncurses для Linux. Чтобы можно было
ходить на стрелочки. Чтобы стены были отрисованы символами. Справилась.
Первый вариант. . .
|
Установка статуса документа по условию
Maks 05.07.2026
Алгоритм из решения ниже реализован на нетиповом документе "НарядПутевка" разработанного в КА2.
Задача: в табличной части "Материалы" документа при записи автоматически устанавливать статус. . .
|
Сезонность и суточность закисления почв
anaschu 04.07.2026
200 часов это все равно моловато. Есть ситуации, но нестандартные, когда смена происходит за 5 лет.
Но обычно это 50 лет и более.
Наверное, закисление почвы происходит сезонно в средней. . .
|