Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.69
nexen
187 / 180 / 3
Регистрация: 27.01.2012
Сообщений: 1,335
#1

Методы init() и dispose() - теория - C++

11.07.2013, 17:16. Просмотров 1715. Ответов 44
Метки нет (Все метки)

Всегда интересовало, зачем существуют эти методы? Допустим, есть некоторый объект класса и в коде видим:
C++
1
2
3
4
5
x = new myClass();
x.init();
...
x.dispose();
delete x;
Одно дело, если бы в эти методы передавались параметры, а другое дело это. Разве не проще было бы весь код init поместить в конструктор, а dispose, соответственно, в деструктор?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
CheshireCat
Эксперт С++
2892 / 1241 / 78
Регистрация: 27.05.2008
Сообщений: 3,364
11.07.2013, 17:23     Методы init() и dispose() - теория #2
О-хо-хо.... Чувствую, что код древний, как окаменевшие экскременты мамонта. Дай угадаю: Turbo Vision для C++? Так этот TV и был переводом с паскалевского TV - в котором как раз и были методы Init (конструктор) и Dispose (деструктор).
Короче, забудь. С тех пор прошло уж 20 лет. Мир изменился.
Avazart
Эксперт С++
7122 / 5299 / 273
Регистрация: 10.12.2010
Сообщений: 23,449
Записей в блоге: 17
11.07.2013, 17:25     Методы init() и dispose() - теория #3
Да это вы у разработчиков либы спрашивайте.

Я лишь могу предположить что init() и dispose() возвращают коды ошибки если такая возникла при их выполнении.
nexen
187 / 180 / 3
Регистрация: 27.01.2012
Сообщений: 1,335
11.07.2013, 17:29  [ТС]     Методы init() и dispose() - теория #4
CheshireCat, да нет, по прежнему вижу подобное периодически. В последний раз замечал в каком-то там классе при программировании на android. Да и в directX вроде было нечто подобное, а там явно не дураки сидят. Наверное всё так, как сказала avazart.
CheshireCat
Эксперт С++
2892 / 1241 / 78
Регистрация: 27.05.2008
Сообщений: 3,364
11.07.2013, 17:39     Методы init() и dispose() - теория #5
Согласен, ннооо.... тогда вот контрольный вопрос (в голову :-) ):
- что будет, если разработчик случайно (ну, где-нибудь глубоко во вложенном if()) забудет вызвать dispose() ? Останутся какие-то неосвобожденные ресурсы или что-то подобное? А если dispose() не будет вызван в результате раскрутки стека при выбросе исключения? Ась?
- что будет, если разработчик случайно же забудет вызвать init() ? Появится недоделанный объект? И как он будет существовать дальше? А что произойдет, если init() не был вызван, а к объекту применяется dispose() ?
Tulosba
:)
Эксперт С++
4393 / 3236 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
11.07.2013, 17:49     Методы init() и dispose() - теория #6
Цитата Сообщение от nexen Посмотреть сообщение
в каком-то там классе при программировании на android.
Ознакомьтесь http://en.wikipedia.org/wiki/Dispose_pattern
CheshireCat
Эксперт С++
2892 / 1241 / 78
Регистрация: 27.05.2008
Сообщений: 3,364
11.07.2013, 17:50     Методы init() и dispose() - теория #7
Да, насчет "кодов ошибок":
C++ позволяет проигнорировать коды ошибок. В приведенном коде - никакого анализа и обработки кодов ошибок и нет.
nexen
187 / 180 / 3
Регистрация: 27.01.2012
Сообщений: 1,335
11.07.2013, 18:03  [ТС]     Методы init() и dispose() - теория #8
Tulosba, а разве x = null не вызывает практически сразу сборку мусора? Ведь, фактически, dispose()-метод заставляет языки с GC следить за памятью так же, как программистам С++: им dispose(), нам delete.
Avazart
Эксперт С++
7122 / 5299 / 273
Регистрация: 10.12.2010
Сообщений: 23,449
Записей в блоге: 17
11.07.2013, 18:07     Методы init() и dispose() - теория #9
Цитата Сообщение от CheshireCat Посмотреть сообщение
C++ позволяет проигнорировать коды ошибок. В приведенном коде - никакого анализа и обработки кодов ошибок и нет.
В приведенном нет, а вообще может быть.
Иначе как по другому организовать обработку ошибок ? Кидать исключения в конструкторе и деструкторе ?
ForEveR
В астрале
Эксперт С++
7970 / 4732 / 320
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
11.07.2013, 18:20     Методы init() и dispose() - теория #10
Avazart, В конструкторе - да. В деструкторе - нет.
nexen
187 / 180 / 3
Регистрация: 27.01.2012
Сообщений: 1,335
11.07.2013, 18:22  [ТС]     Методы init() и dispose() - теория #11
ForEveR, эм, разве в конструкторе можно кидать исключения? Имею ввиду, разве это безопасно? :0 Просто я уже как-то об этом спрашивал, меня тапками закидали
ForEveR
В астрале
Эксперт С++
7970 / 4732 / 320
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
11.07.2013, 18:24     Методы init() и dispose() - теория #12
nexen, В конструторе да. В деструкторе нет. Хотя, все зависит от того, что подразумевается под словом "безопасность".
Avazart
Эксперт С++
7122 / 5299 / 273
Регистрация: 10.12.2010
Сообщений: 23,449
Записей в блоге: 17
11.07.2013, 18:25     Методы init() и dispose() - теория #13
Цитата Сообщение от ForEveR Посмотреть сообщение
Avazart, В конструкторе - да. В деструкторе - нет.
Что делать с ошибкой при уничтожении ?
ForEveR
В астрале
Эксперт С++
7970 / 4732 / 320
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
11.07.2013, 18:26     Методы init() и dispose() - теория #14
Avazart, Всмысле? Попробуйте-ка создать std::string от nullptr.
https://ideone.com/47T8J4
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.07.2013, 18:30     Методы init() и dispose() - теория
Еще ссылки по теме:
Ubuntu Linux Ошибка при загрузке Ubuntu 14.04 LTS: run-init: /sbin/init: Permission denied
Теория и методы структурного программирования

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Avazart
Эксперт С++
7122 / 5299 / 273
Регистрация: 10.12.2010
Сообщений: 23,449
Записей в блоге: 17
11.07.2013, 18:30     Методы init() и dispose() - теория #15
Цитата Сообщение от ForEveR Посмотреть сообщение
Avazart, Всмысле? Попробуйте-ка создать std::string от nullptr.
https://ideone.com/47T8J4
Имею ввиду смысл кода который занимает ресурсы в конструкторе, а освобождать его приходится методом, а не деструктором
(что бы отловить ошибку при освобождении).
Yandex
Объявления
11.07.2013, 18:30     Методы init() и dispose() - теория
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru