|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
25.12.2012, 00:55 | #1 |
Новичок
Джуниор
Регистрация: 25.12.2012
Сообщений: 5
|
operator using and IDisposable
какая раздница между оператором using и методом Dispose?
В плане где нужно использовать первое, где второе? в чем различие? PS: Ведь using использует реализацию данного интерфейса, дак зачем тогда использовать метод dispose в ручную? |
25.12.2012, 01:19 | #2 |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
using это концепция RAII, просто синтаксический сахар.(удобный кстати)
не нравится(или не подходит, ибо using это один блок, между процедурами не передашь ресурс) используйте интерфейс напрямую. Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
25.12.2012, 01:28 | #3 |
Новичок
Джуниор
Регистрация: 25.12.2012
Сообщений: 5
|
Ответ верный, но я немного не правильно задал вопрос.
Эм конкретизируем для маленького блока: Using ( для объекта p выделяем ресурсы ) { /.../ } и для объекта p выделяем ресурсы /.../ p.Dispose(); в чем раздница? ( раздница есть, я сам точно не знаю в чем, но препод тонко намекнул на работу Сборщика мусора ) |
25.12.2012, 01:38 | #4 |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
в using гарантируется что ресурс будет освобожден, вне зависимости от сборки мусора.
при ручном если вы вдруг забыли освободить ресурс, то его освобождение произойдет только при сборке мусора. Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
25.12.2012, 15:16 | #5 |
Форумчанин
Регистрация: 17.12.2008
Сообщений: 250
|
если произойдет экзепшион в блоке using то ресурс все равно будет освобожден, во втором подходе ресурсу будет освобожден только при сборе мусора
using разворачивается в нечто подобное Код:
|
25.12.2012, 21:00 | #6 | |
Форумчанин
Регистрация: 21.01.2009
Сообщений: 719
|
Цитата:
Веселье в том, что упомянутый сборщик мусора IDisposable сам по себе нифига не освобождает. Сборщик вызывает только финалайзер ~Class() (если есть), из которого обычно дергают Dispose, да и то не факт что вызовет сразу как собрал. В обычном случае с бесхитростным IDisposable не произойдет вообще ничего, и ресурсы останутся занятыми. Так что в любом случае оставлять IDisposabl'ы на волю сборщика не следует.
Изобретатель велосипедов
|
|
25.12.2012, 22:45 | #7 | |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
Цитата:
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
|
26.12.2012, 11:37 | #8 | |
Форумчанин
Регистрация: 29.10.2009
Сообщений: 259
|
Цитата:
Код:
Код:
Сам стараюсь всегда все что только возможно оборачивать в using - дает о себе знать моя скупость на динамическую память. Также советую перевести и прочесть небольшую статью на CodeProject, где описывается в какое количество строк рукописного кода может выльиться оператор using. Цитирую и вставляю пару комментариев от себя: Код:
Из всех классических книг, посвященных программированию, ненавижу всего одну - русский перевод книги Роберта Седжвика-"Фундаментальные алгоритмы C++". Предпочитаю читать её в оригинале.
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
operator++ | prikolist | Общие вопросы C/C++ | 17 | 15.01.2013 16:17 |
operator= | _Bers | Общие вопросы C/C++ | 2 | 18.04.2012 06:45 |
operator== | stenl1 | Общие вопросы C/C++ | 11 | 27.07.2011 06:38 |
ошибка: no match for ‘operator<<’ in ‘std::operator<< [with _Traits = std::char_traits<char> | Critter | Общие вопросы C/C++ | 5 | 08.08.2010 23:38 |
operator<< | Наташенька | Общие вопросы C/C++ | 6 | 08.06.2009 18:59 |