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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 01.12.2012, 18:21   #1
pproger
C++ hater
СтарожилДжуниор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,336
По умолчанию нужен ли RAII в данном случае

имелась некоторая задача. захватить ресурс, выполнить некоторые тривиальные действия, освободить ресурс. решил так:

Код:
bool doWork()
{
	class Locker {
	public:
		Locker()
		{ lock(); }

		~Locker()
		{ unlock(); }

		bool doWork()
		{
			// using recource
			return true;
		}
	};

	return Locker().doWork();
}
локальный класс использовал только потому, что операция специфичная для функции doWork, нигде больше он использоваться не может.

но сейчас задумался. зачем вообще мне тут нужен 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
pproger вне форума Ответить с цитированием
Старый 01.12.2012, 18:47   #2
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Если исключения отключены и никогда включены не будут, и метод меняться не будет, то смысл использовать RAII действительно становится весьма призрачным. Тем не менее, если метод будет достаточных размеров, то и без исключений могут быть ситуации, где освобождение ресурсов будет пропущено (например вставлен return до вызова unlock). Так что рекомендую всё же использовать RAII для управления всеми ресурсами, правда не в виде локальных классов, но с чем-то, схожим по принципу действия со scope(exit/failure/success) из D, например
http://www.drdobbs.com/cpp/generic-c...epti/184403758
netrino вне форума Ответить с цитированием
Старый 01.12.2012, 18:58   #3
pproger
C++ hater
СтарожилДжуниор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,336
По умолчанию

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.
pproger вне форума Ответить с цитированием
Старый 01.12.2012, 20:15   #4
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Ну тогда, как говорится, выбор за Вами . Я бы убрал локальный класс, но RAII оставил
netrino вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
в данном коде почему то 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