|
187 / 180 / 25
Регистрация: 27.01.2012
Сообщений: 1,335
|
||||||
Методы init() и dispose() - теория11.07.2013, 17:16. Показов 16587. Ответов 44
Метки нет (Все метки)
Всегда интересовало, зачем существуют эти методы? Допустим, есть некоторый объект класса и в коде видим:
0
|
||||||
| 11.07.2013, 17:16 | |
|
Ответы с готовыми решениями:
44
Методы у JInternalFrame: setClosed(true); dispose(); Методы Dispose и Close для Stream
|
|
:)
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
|
||
| 12.07.2013, 09:53 | ||
|
2
|
||
|
~ Эврика! ~
1258 / 1007 / 74
Регистрация: 24.07.2012
Сообщений: 2,002
|
|
| 12.07.2013, 21:33 | |
|
А ещё init() и dispose() нужны, когда вам надо создать объект в "другом мире" (с помощью конструкторов какой-нибудь динамической библиотеки, или вообще другого процесса). Когда "местные" operator new() и operator delete() не подходят.
0
|
|
|
~ Эврика! ~
1258 / 1007 / 74
Регистрация: 24.07.2012
Сообщений: 2,002
|
||
| 13.07.2013, 13:23 | ||
|
2
|
||
|
Комп_Оратор)
|
|
| 13.07.2013, 15:04 | |
|
В средах с gc применение Dispose() нормальная практика. Интересно, действительно подумать, а как это в С++.)
Поразмыслив пришла мысль, а что если вопрос применения таких методов, - может быть и вопросом времени? Смотрите, стоит только не высказать глупость, как тут же её никто и не опровергнет. То есть налицо потеря времени! ![]() Придётся, высказаться. Предположим есть класс с набором "тяжелых" полей, для которых применяется отложенная (ленивая инициализация). То есть конструктор не проводит их инициализацию, а необходимые вычисления осуществляют методы доступа при первом обращении. Тогда, если есть группа объектов, для которых точно потребуется полная инициализация, а участок кода в которых они задействованы должен выполниться максимально быстро, то можно принудительно инициализировать их в специальном методе, до вхождения в данный блок кода. Пользуясь той же логикой, Dispose(), - дополнительный метод выполняющий принудительное освобождение, не проверяя занят ли ресурс (если проверка требует времени). Это быстро и... если пользователь применит не там, где нужно, - получит исключение и опомнится. Что касается вопросов типа: - "А что если?!", то всегда можно спросить: - "А вдруг кто-то дважды применит delete?" Последнее, конечно дискуссионный вопрос.
0
|
|
|
~ Эврика! ~
1258 / 1007 / 74
Регистрация: 24.07.2012
Сообщений: 2,002
|
|
| 13.07.2013, 15:15 | |
|
1
|
|
|
Комп_Оратор)
|
||
| 13.07.2013, 15:48 | ||
0
|
||
|
~ Эврика! ~
1258 / 1007 / 74
Регистрация: 24.07.2012
Сообщений: 2,002
|
|
| 13.07.2013, 17:18 | |
|
Нет, Dispose (в CLR) — это метод, освобождающий все unmanaged-ресурсы, которыми владеет объект (открытые файлы, разделяемую память и всё такое), чтобы после этого остались только managed-ресурсы, которые подчистит уже GC. Это не подсказка GC: "А ну быстро отдал мне память, занимаемую этим объектом", и объект после вызова этого метода не находится в неопределённом состоянии. Он просто позакрывал всякие хендлы, но в принципе ещё никуда не делся.
2
|
|
|
Комп_Оратор)
|
||
| 13.07.2013, 17:28 | ||
|
В С++ это же не ключевое слово. В С тоже. Там Init() использовали для инициализации структур, как стиль. Назвать можно бы как угодно. Вопрос же в том есть ли сейчас этому применение?
0
|
||
|
Комп_Оратор)
|
||
| 13.07.2013, 17:40 | ||
0
|
||
|
|
|
| 13.07.2013, 17:54 | |
|
Так где вы такую литературу С++ надыбали ?
Обычно все решается в конструкторе, на то он и конструктор. Но есть ситуации когда бывает нужно "переинициализировать" переменные например открыть другую базу данных ... ( закрыть старую, открыть новую ), например методом open(), но в таких случаях он в принципе дублирует конструктор(ы). Разбиение/объединение в методы это вопрос назначения класса тут- удобство/возможности. Чем больше методов больше возможностей и более гибко можно использовать класс (возможно, а возможно и нет), но он менее удобен в конкретной задаче: много методов- легко запутаться, тяжело читается в общем коде. Добавлено через 6 минут Если же вы плодите куча методов и они дают больше возможностей чем затребовано, то скорее всего вы нарушаете инкапсуляцию.
0
|
|
|
|
|||
| 13.07.2013, 18:29 | |||
|
1
|
|||
|
Комп_Оратор)
|
||||||||||||
| 13.07.2013, 18:46 | ||||||||||||
|
В.В. Лаптев С++ Объектно-ориентированное программирование. Изд-во Питер 2008г. стр.26
Б. Страуструп Язык программирования С++. Специальное издание. Москва, БИНОМ, 2011г. стр. 284, 285
0
|
||||||||||||
|
|
|
| 13.07.2013, 19:32 | |
|
0
|
|
|
|
|
| 13.07.2013, 19:36 | |
|
Листаем назад, на стр. 272 читаем :
0
|
|
| 13.07.2013, 19:36 | |
|
Ошибка при загрузке Ubuntu 14.04 LTS: run-init: /sbin/init: Permission denied Виртуальные методы(теория) Теория и методы структурного программирования Функция init Init = function Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
28. КОнкретное развертывание плана номер 1 из поста номер 27
anaschu 22.06.2026
Можно ли из модели получить конкретные строительные требования?
Честно — напрямую из текущей модели такие ответы не получить. Но цепочка логики есть, и она не такая длинная.
Где разрыв
. . .
|
27. Планы на разработку функциональных требований к строительству внутри модели пищеблока (или не только его?)
anaschu 22.06.2026
Что уже реализовано и даёт конфликты «бесплатно»
Самый простой конфликт уже работает — конфликт за ресурс-работника. Заданий больше, чем доступных поваров → очередь в queue1. Это прямое отражение. . .
|
26. мед мат модель.Какие типы конфликтов функциональных требований можно рассчитать через ДЕС-моделирование (СМО) в AnyLogic?
anaschu 22.06.2026
Что ДЕС/ СМО умеет считать напрямую:
Конфликты за ресурсы (очереди, узкие места). Несколько типов агентов (повара, учителя, рабочие, пациенты) претендуют на один ресурс (лифт, вход, коридор,. . .
|
25 модель здравосохранения и функциональных требований к пищеблоку: конфликты функциональных требований.
anaschu 22.06.2026
Есть ли данные о том, какие функциональные/ эксплуатационные требования или их сочетания труднее всего учитывать при проектировании зданий?
Да, такие данные есть, и они хорошо описаны и в российской,. . .
|
|
Remote Connection Manager
DevAlt 21.06.2026
Написал для себя небольшую прилагу:
https:/ / github. com/ altbodhi/ ReConMan
По итогу пришел к мысли, что DU не дружат с существующими технологиями.
От сериализации до отображения в реляционную. . .
|
Администрация Хабра удаляет новые энрегоэфективные алгоритмы, которые не западной школы кода, и вовсе никак не сгенерировавны.
Hrethgir 20.06.2026
Делается это, как замечено, при правках - при объявлении концептуальных отличий в алгоримах. Делается это, по линейке событий - после дополнения публикации основными отличиями от основных западных. . .
|
Процесс ориентированная диалектика (не новость - просто системное обновление, философия).
Hrethgir 20.06.2026
Однажды один участник в своём блоге, на этом форуме, сделал запись "О языках замолвите слово". Понимая, что язык - важная вещь, я решил хорошо подумать, прежде чем сказать, и сказал то, что вы видите. . .
|
Контроль уникальности строк в табличной части документа
Maks 18.06.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ПланированиеСпецтехники" с табличной частью "НаличиеОборудования", разработанного в КА2.
Задача: контроль уникальности строк в. . .
|