|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
01.12.2012, 18:21 | #1 |
C++ hater
СтарожилДжуниор
Регистрация: 19.07.2009
Сообщений: 3,333
|
нужен ли RAII в данном случае
имелась некоторая задача. захватить ресурс, выполнить некоторые тривиальные действия, освободить ресурс. решил так:
Код:
но сейчас задумался. зачем вообще мне тут нужен raii. в проекте исключения не используются, никто их не перехватывает (да и вообще отключены), точка выхода из метода doWork одна, и вряд ли он вообще будет меняться. остался ли в данном примере у raii вообще какой-либо смысл? обрадовался, что нашел удачное применение локальному классу, ан вышесказанное сводит его на нет. пс. как же достал местный тег code, ставящий 8 пробелов на таб.
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay
My other car is cdr. Q: Whats the object-oriented way to become wealthy? A: Inheritance |
01.12.2012, 18:47 | #2 |
Участник клуба
Регистрация: 15.07.2008
Сообщений: 1,933
|
Если исключения отключены и никогда включены не будут, и метод меняться не будет, то смысл использовать RAII действительно становится весьма призрачным. Тем не менее, если метод будет достаточных размеров, то и без исключений могут быть ситуации, где освобождение ресурсов будет пропущено (например вставлен return до вызова unlock). Так что рекомендую всё же использовать RAII для управления всеми ресурсами, правда не в виде локальных классов, но с чем-то, схожим по принципу действия со scope(exit/failure/success) из D, например
http://www.drdobbs.com/cpp/generic-c...epti/184403758 |
01.12.2012, 18:58 | #3 |
C++ hater
СтарожилДжуниор
Регистрация: 19.07.2009
Сообщений: 3,333
|
2netrino
я это понимаю, поэтому и написал, что точка выхода одна, вероятность изменения кода, как говорится, КРАЙНЕ МАЛА оверхедом в виде scopeguard ради этого случая сейчас заниматься лень (хотя конечно будет полезно, ибо и в других местах пригодится), поэтому локальный класс. пс. в бусте оказывается есть BOOST_SCOPE_EXIT, который очевидно точно так же и разворачивается в локальный класс.
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay
My other car is cdr. Q: Whats the object-oriented way to become wealthy? A: Inheritance Последний раз редактировалось pproger; 01.12.2012 в 19:17. |
01.12.2012, 20:15 | #4 |
Участник клуба
Регистрация: 15.07.2008
Сообщений: 1,933
|
Ну тогда, как говорится, выбор за Вами . Я бы убрал локальный класс, но RAII оставил
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
в данном коде почему то | dmitryogibalov | Помощь студентам | 2 | 10.11.2012 20:22 |
Как работает fwrite() в данном случае ? | Sergey S | Общие вопросы C/C++ | 2 | 30.05.2012 07:22 |
Авторизация на данном форуме | Arsenx777 | Работа с сетью в Delphi | 4 | 18.08.2011 19:37 |
Непонятно: зачем делать декларацию функции в данном случае? | Oleg_SK | Общие вопросы C/C++ | 0 | 17.07.2010 09:36 |
Delphi, рекурсия, как сделать все возможные N-ки чисел (сколько столбцов такая N-ка,в данном случае 3)? | domik | Помощь студентам | 5 | 26.09.2007 16:43 |