|
1 / 1 / 0
Регистрация: 31.03.2019
Сообщений: 144
|
|
Как “научить” Указатель определять, что сам Объект уже удален?30.08.2020, 22:14. Показов 5204. Ответов 40
Метки висячий указатель (Все метки)
Кажется, это называется “Висячий Указатель”, который указывает на уже удаленный Объект.
Хочется, чтоб когда Объект удаляется из памяти, то все указатели на него обращались бы NULL. Как это сделать? М.б. существуют какие-то методики, чтобы бороться с Висячими Указателями? Я уже отчаялся и пытаюсь придумать свой “велосипед” : типа менеджер Объектов, который регистрирует указатели и следит за удаляемыми объектами. Но, надеюсь, что есть более простые способы. Пожалуйста, подскажите...
0
|
|
| 30.08.2020, 22:14 | |
|
Ответы с готовыми решениями:
40
Что значит константный указатель на объект, указатель на константный объект, и как это можно использовать? Как проверить, быль ли удалён указатель или нет? Нужно научить прогу определять дату |
|
87 / 87 / 18
Регистрация: 11.06.2018
Сообщений: 302
|
||
| 31.08.2020, 15:14 | ||
|
Допустим даже я сейчас тебе накидаю пример, кто за последствия его применения будет в ответе, я или ты? Я тебе гарантий никаких не дам. Если уж у тебя не хватает квалификации выработать это решение самостоятельно, то лучше будет привлечь кого-то, кто даст эти гарантии. Это если задача и правда серьезная, а не ты ее такой хочешь представить. Просить "бесплатных" советов на форуме для серьезных задач - это чистая и незамутненная форма профанации. Это я уж не касаюсь того, что в серьезных задачах всегда такое колоссальное количество нюансов, что скудным описанием на форуме точно не отделаешься. Двумя сообщениями выше предложили пул с регистрацией. Ок - это решение. Но подойдет ли оно тебе, зависит от этого колоссального количество нюансов, которое ты даже рассказать не имеешь права, если задача и правда серьезная. Вот и что? Поэтому общий ответ в силе: лечить надо причину.
0
|
||
|
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
|
||
| 31.08.2020, 15:17 | ||
|
0
|
||
|
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
|
|||
| 31.08.2020, 15:19 | |||
|
Я рассказал как устроен shared_ptr в ответ на этот вопрос.
1
|
|||
|
фрилансер
6504 / 5749 / 1134
Регистрация: 11.10.2019
Сообщений: 15,394
|
|
| 31.08.2020, 15:20 | |
|
Artem_Pv, таки используй std::shared_prt , но в объект ещё добавь флажок deleted. Перед "удалением" из своего контейнера выставляй этот флажок. Если где-то есть указатели, они всегда смогут понять, что объект "удалён" и сами указатели можно почистить
0
|
|
|
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
|
||
| 31.08.2020, 15:27 | ||
Сообщение было отмечено Artem_Pv как решение
Решение2) Выделение и владение (это важно) происходит только в этом пуле, владеющий указатель сохраняется в спец. ячейку. 3) Наружу отдаются обертки с указателем на ячейку в пуле. 4) Всегда можно обратиться к ячейке в пуле и проверить жив объект или нет. Если пул сам обнулит ячейку, но она обнулится у всех ссылающихся на нее указателей. Проблемы: 1) ячейка в пуле может быть перезанята, и проверка сломается; 2) можно не использовать ячейки повторно, или использовать их только по истечении какого-то времени (со всеми вытекающими из этого недостатками по расходу памяти); 3) сама ячейка всегда должна быть доступна для чтения, иначе вернемся к исходной проблеме.
1
|
||
|
|
||
| 31.08.2020, 15:41 | ||
|
std::shared_ptr освобождает память только если счетчик становится = 0, иначе просто ничего не делает кроме уменьшения счетчика. Добавлено через 6 минут DrOffset, Ну это по сути тоже что и gc писать или использовать пару shared+weak
0
|
||
|
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
|
|
| 31.08.2020, 15:43 | |
|
0
|
|
|
1 / 1 / 0
Регистрация: 31.03.2019
Сообщений: 144
|
||
| 31.08.2020, 15:44 [ТС] | ||
|
Когда требуется повторно использовать ячейки(уже удаленных объектов), то запускается процедура Упаковки всего пула, где перестраиваются внешние указатели на оставшиеся ячейки в пуле.
0
|
||
|
фрилансер
6504 / 5749 / 1134
Регистрация: 11.10.2019
Сообщений: 15,394
|
||||||
| 31.08.2020, 15:46 | ||||||
|
Avazart, ты просто не вник. Это не влияние на указатели это пометка о невалидности объекта. И тогда, где-то, где есть указатель, можно проверить эту валидность и почистить указатель (понятно, что это не само произойдёт. а, так сказать, в пассивном режиме)
0
|
||||||
|
1 / 1 / 0
Регистрация: 31.03.2019
Сообщений: 144
|
|||
| 31.08.2020, 16:08 [ТС] | |||
|
0
|
|||
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
||||
| 31.08.2020, 16:29 | ||||
|
тут два варианта: либо на машине реально есть столько памяти, либо нет, и тогда узким горлышком будет файл подкачки. в любом случае, можешь смело использовать смарты всего сырых указателей. со смартами тоже будет летать. смарт-поинтер сам по себе узким горлышком не бывает.
0
|
||||
|
|
|||
| 31.08.2020, 16:33 | |||
|
Добавлено через 1 минуту
0
|
|||
|
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
|
|
| 01.09.2020, 14:16 | |
|
0
|
|
|
2083 / 1576 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
|
|
| 01.09.2020, 16:57 | |
Сообщение было отмечено Artem_Pv как решение
Решение
Artem_Pv, Объект помнит эти n указателей в списке и из своего деструктора их обнуляет. Указатели соответсвенно добавляются/удаляются из оного списка в своих конструкторах/операторах присваивания/деструкторахю Возможна реализация на основе односвязного списка с хранением указателя в самом смарте, как это сделано в итераторах STL. Так же и вариация на тему двусвязного списка с O(1) удалением смарта-подписчика.
В общем обширный список способов под общим названием "двунаправленные указатели". Если капать глубже - то одно из возможных реализаций/применений паттерна "обсервер".
1
|
|
|
1 / 1 / 0
Регистрация: 31.03.2019
Сообщений: 144
|
||
| 02.09.2020, 06:01 [ТС] | ||
|
Не нужно использовать управляющий движок(менеджер объектов). Спасибо.
0
|
||
|
фрилансер
6504 / 5749 / 1134
Регистрация: 11.10.2019
Сообщений: 15,394
|
|
| 02.09.2020, 08:19 | |
|
это, получается, придётся хранить список указателей на указатели, ваще огонь
И ни разу не оверхед. И просто то как!
0
|
|
|
2083 / 1576 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
|
|||
| 02.09.2020, 11:24 | |||
|
Добавлено через 3 минуты При этом список в принципе может быть односвязный и хранится указатель на следующего в самом смарте. С контроллерами все равно придется зранить два указателя - на объект и на контроллер. Добавлено через 10 минут Все в конечном итоге зависит от паттерна добавоения / удаления самтх указателей и того где более приемлем оверхед - по памяти или по производительности. К примеру у итераторов добавление/удаление в список производится строго в порядке первым добавлен/последни удален, а долгоживущих которые этим правилам не подчиняются или вообще нет или их мизер. Здесь оверхед на O(n) поиск в односвязном списке по производительности будет либо мизерным либо его вообще не будет, и соответсвенно можно слегка поэкономить память на второй связности списка. А если паттерн произвольный - то оверхед уже будет гораздо более значительный и гораздо логичнее добавить третий указатель на предыдущего в итератор, но получить удаление итератора из списка за O(1).
1
|
|||
|
|
||
| 02.09.2020, 12:39 | ||
|
0
|
||
| 02.09.2020, 12:39 | |
|
Как двигать объект, когда нажимаешь на сам объект? Как преобразовать ссылку на объект в указатель на этот объект? Проверка удален ли объект Удалить сочетание клавиш у ярлыка, который уже удален Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js.
В помощники взял Яндекс-Алису.
Было создано три зала на разные интересы.
исторические и ретро
сериал Хичкок. . .
|
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
|
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#.
Название изменил на ColorStep.
Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
|
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами:
- ВидТО (СправочникСсылка. ВидыТО);
- ВидГСМ. . .
|
|
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала.
Ниже прикреплён. . .
|
Программа опроса у.з. расходомера 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: Математический инвариант ОДУ и рок Стивов-бонобо
Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
|