Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.10.2012, 14:15   #1
WorldMaster
Старожил
 
Аватар для WorldMaster
 
Регистрация: 25.08.2011
Сообщений: 2,841
По умолчанию Удаление ссылок на объект

Здравствуйте, столкнулся вот с такой проблемой. Имеется объект А.
Также в процессе работы программы появляется N объектов которые содержат указатель на объект А.
Затем объект А удаляется.
Вопрос: Как теперь сделать так чтобы все указатели которые существуют в объектах N стали указывать на null??

Спасибо.
Skype - wmaster_s E-Mail - WorldMasters@gmail.com
Работаем по 3 критериям - быстро, качественно, недорого. Заказчик выбирает любые два.
WorldMaster вне форума Ответить с цитированием
Старый 23.10.2012, 10:30   #2
dampirik
Форумчанин
 
Регистрация: 02.07.2009
Сообщений: 722
По умолчанию

Читаем раз два три
dampirik вне форума Ответить с цитированием
Старый 23.10.2012, 18:33   #3
WorldMaster
Старожил
 
Аватар для WorldMaster
 
Регистрация: 25.08.2011
Сообщений: 2,841
По умолчанию

Цитата:
Сообщение от dampirik Посмотреть сообщение
Читаем раз два три
Баянчик ... Думаете что я не читал подобных тем?? уже перелазил тучу форумов, статей всяких уже читал. Никакие коллекторы тут не помогают. Как я их только не вызывал. Хотя уже появляется сомнение что эту задачу невозможно решить.

Вот пример...

Код:
tstnode nd = new tstnode(); // создали экземпляр
WeakReference wf = new WeakReference(nd); // создали слабую ссылку на экземпляр
tstnode temp = (wf.Target as tstnode); // создали новую переменную и указали ей на наш экземпляр

nd = null; // удаляем ссылку (теперь ее должен грохнуть коллектор)

GC.Collect(); // принудительно вызываем его
GC.Collect(GC.GetGeneration(wf)); // чистим все поколения

temp = (wf.Target as tstnode); // а данные один хрен остались :( а нужно чтобы значение стало null
Skype - wmaster_s E-Mail - WorldMasters@gmail.com
Работаем по 3 критериям - быстро, качественно, недорого. Заказчик выбирает любые два.
WorldMaster вне форума Ответить с цитированием
Старый 23.10.2012, 18:44   #4
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

а с какого должны стать нулом?
eval вне форума Ответить с цитированием
Старый 23.10.2012, 19:09   #5
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

может быть применить чтото вроде IDisposable?
а именно если объект недействителен, то он будет иметь флаг указывающий на это?
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 23.10.2012, 19:24   #6
Luuzuk
Форумчанин
 
Аватар для Luuzuk
 
Регистрация: 18.01.2012
Сообщений: 975
По умолчанию

Цитата:
Затем объект А удаляется
Вы языком программирования не ошиблись? Удалять объекты по собственному желанию - привилегия неуправляемого кода
Код:
nd = null; // удаляем ссылку (теперь ее должен грохнуть коллектор)
Коллектор никому ничего не должен, он может освободить память, занятую объектом, а может и не делать этого
Благодарить в репутацию. Проклинать — туда же
Luuzuk вне форума Ответить с цитированием
Старый 23.10.2012, 21:35   #7
WorldMaster
Старожил
 
Аватар для WorldMaster
 
Регистрация: 25.08.2011
Сообщений: 2,841
По умолчанию

Хорошо. Я могу ошибатся. Но вот суть то наеврное уже ясна всем. Подскажите как сделать чтобы одним махом все указатели на объект стали недействительными? Вроде в С++ как то так и было .. бахнул основной объект и все кто ссылались н анего стали нулями.
Skype - wmaster_s E-Mail - WorldMasters@gmail.com
Работаем по 3 критериям - быстро, качественно, недорого. Заказчик выбирает любые два.
WorldMaster вне форума Ответить с цитированием
Старый 24.10.2012, 19:57   #8
ImmortalAlexSan
Участник клуба
 
Аватар для ImmortalAlexSan
 
Регистрация: 13.01.2009
Сообщений: 1,353
По умолчанию

Цитата:
Подскажите как сделать чтобы одним махом все указатели на объект стали недействительными?
Реализовать интерфейс IDisposable и применить метод Dispose
"Тебе то может на меня и насрать, но твои глаза меня обожают!"
ImmortalAlexSan вне форума Ответить с цитированием
Старый 24.10.2012, 20:00   #9
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

ImmortalAlexSan
И чем поможет IDisposable ?
eval вне форума Ответить с цитированием
Старый 24.10.2012, 20:36   #10
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А всетки мне интересно зачем так копошиться?
В связи с чем встала задача так резко?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Удаление ссылок с текста ZuBy Общие вопросы Delphi 8 10.03.2012 13:09
Notepad++ удаление ссылок из текста alexp21 Софт 0 29.09.2011 20:57
Удаление одинаковых ссылок из ячеек Matras Microsoft Office Excel 1 15.03.2011 21:22
удаление одинаковых ссылок neoman1 Microsoft Office Word 6 30.11.2009 16:05
Удаление текстов ссылок PeterMinin Microsoft Office Word 11 22.10.2009 12:45